vue引入百度地圖BMapGL交惯,以及輔助工具BMapGLLib 的引入次泽,BMapGL鼠標(biāo)繪制功能穿仪。

BMapGL畫圖工具的引入.jpg
寫在前面

前面有篇文章【vue引入百度地圖BMapGL,或者其他個(gè)性化地圖】寫了一個(gè)關(guān)于vue百度地圖BMapGL的引入意荤,有人問怎么引入BMapGLLib 啊片,因?yàn)槲以陧?xiàng)目只用了其中的一點(diǎn)點(diǎn)簡(jiǎn)單的,所以關(guān)于繪制的是自己擼的沒有引入BMapGLLib 玖像。既然有人問紫谷,那么就弄了一下。

文件結(jié)構(gòu)

BMapGLLib.vue是文件御铃,bmpgl_lib.js是調(diào)用方法


文件結(jié)構(gòu).jpg

在src里面創(chuàng)建一個(gè)bmpgl_lib.js

其實(shí)建立在哪看你自己的意愿啦碴里。(小聲逼逼)
如果只用BMapGL那么只用loadBaiDuMap() 這個(gè)方法就好了。(再次小聲逼逼)

const ak = 'XXXXXX' // 百度的地圖密鑰
/**
 * 異步加載百度地圖
 * @returns {Promise}
 * @constructor
 */
function loadBaiDuMap() {
  return new Promise(function (resolve, reject) {
    try {
      console.log('BMap is defined:', BMapGL === undefined || BMapGL)
      resolve(BMapGL)
    } catch (err) {
      window.init = function () {
        resolve(BMapGL)
      }
      let script = document.createElement('script')
      script.type = 'text/javascript'
      script.src = `http://api.map.baidu.com/api?v=1.0&type=webgl&ak=${ak}&callback=init`
      script.onerror = reject
      document.body.appendChild(script)
    }
  })
}
export { loadBaiDuMap }
/**
 * 異步加載百度地圖,以及繪制工具
 * @returns {Promise}
 * @constructor
 */
function loadBaiDuDrawMap() {
  return loadBaiDuMap().then(BMapGL => {
    let loaded = false
    try {
      loaded = (BMapGLLib && BMapGLLib.DrawingManager)
    } catch (err) {
      loaded = false
    }
    if (!loaded) {
      console.log('BMapLib.DrawingManager loading!')
      let script = document.createElement('script')
      script.type = 'text/javascript'
      script.src = 'http://mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js'
      document.body.appendChild(script)
      let link = document.createElement('link')
      link.rel = 'stylesheet'
      link.
      document.body.appendChild(link)
    } else {
      console.log('BMapLib.DrawingManager is loaded!')
    }
    return BMapGL
  })
}
export { loadBaiDuDrawMap }

vue頁面里面引入

<template>
  <div class="home">
    <!-- BMapGLLib 控件上真,這里自己去優(yōu)化一下吧咬腋,寫成循環(huán)吧 ,睡互,懶得寫了 -->
    <ul class="drawing-panel">
      <li class="bmap-btn bmap-marker" @click="draw('marker')" :style="{ 'background-position-y': actNav === 'marker' ? '-52px' : '0px'}"></li>
      <li class="bmap-btn bmap-polyline" @click="draw('polyline')" :style="{ 'background-position-y': actNav === 'polyline' ? '-52px' : '0px' }"></li>
      <li class="bmap-btn bmap-rectangle" @click="draw('rectangle')" :style="{ 'background-position-y': actNav === 'rectangle' ? '-52px' : '0px' }"></li>
      <li class="bmap-btn bmap-polygon" @click="draw('polygon')" :style="{'background-position-y': actNav === 'polygon' ? '-52px' : '0px'}"></li>
      <li class="bmap-btn bmap-circle" @click="draw('circle')" :style="{'background-position-y': actNav === 'circle' ? '-52px' : '0px'}"></li>
    </ul>
    <!-- 地圖容器 -->
    <div id="container" class="allmap"></div>
  </div>
</template>

<script>
// 引入異步引入地圖的方法
import { loadBaiDuDrawMap } from "@/bmpgl_lib.js";
export default {
  name: "home",
  data() {
    return {
      map: null,
      actNav: "",
    };
  },
  mounted() {
    this.initMap();
  },
  methods: {
    initMap() {
      // 初始化地圖
      loadBaiDuDrawMap().then((BMapGL) => {
        // 創(chuàng)建地圖實(shí)例
        let map = new BMapGL.Map("container");
        // 添加比例尺控件
        map.addControl(
          new BMapGL.ScaleControl({
            anchor: BMAP_ANCHOR_BOTTOM_LEFT,
            offset: new BMapGL.Size(10, 10),
          })
        );
        // 添加縮放控件
        map.addControl(
          new BMapGL.ZoomControl({
            anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
            offset: new BMapGL.Size(10, 10),
          })
        );
        // 保存地圖
        this.map = map
        // 創(chuàng)建點(diǎn)坐標(biāo) axios => res 獲取的初始化定位坐標(biāo)
        const point = new BMapGL.Point(114.031761, 22.542826);
        // 初始化地圖根竿,設(shè)置中心點(diǎn)坐標(biāo)和地圖級(jí)別
        map.centerAndZoom(point, 19);
        //開啟鼠標(biāo)滾輪縮放
        map.enableScrollWheelZoom(true);
        map.setHeading(64.5);
        map.setTilt(73);
      });
    },
    draw(type) {
      this.actNav = type
      const styleOptions = {
        strokeColor: "#5E87DB", // 邊線顏色
        fillColor: "#5E87DB", // 填充顏色。當(dāng)參數(shù)為空時(shí)就珠,圓形沒有填充顏色
        strokeWeight: 2, // 邊線寬度寇壳,以像素為單位
        strokeOpacity: 1, // 邊線透明度,取值范圍0-1
        fillOpacity: 0.2, // 填充透明度妻怎,取值范圍0-1
      };
      const labelOptions = {
        borderRadius: "2px",
        background: "#FFFBCC",
        border: "1px solid #E1E1E1",
        color: "#703A04",
        fontSize: "12px",
        letterSpacing: "0",
        padding: "5px",
      };
      // 實(shí)例化鼠標(biāo)繪制工具
      const drawingManager = new BMapGLLib.DrawingManager(this.map, {
        // isOpen: true,        // 是否開啟繪制模式
        enableCalculate: false, // 繪制是否進(jìn)行測(cè)距測(cè)面
        enableSorption: true, // 是否開啟邊界吸附功能
        sorptiondistance: 20, // 邊界吸附距離
        rectangleOptions: styleOptions, // 矩形的樣式
      });
      if (drawingManager.isOpen_ && drawingManager.getDrawingMode() === type) {
        drawingManager.close();
      } else {
        drawingManager.setDrawingMode(type);
        drawingManager.open();
      }
    },
  },
};
</script>
<style lang="scss">
// 隱藏版權(quán)信息
.BMap_cpyCtrl {
  display: none;
}
// 隱藏版權(quán)圖標(biāo)
.anchorBL img {
  display: none;
}
</style>
<style lang="scss" scoped>
.allmap {
  width: 100%;
  height: 100vh;
  position: relative;
  z-index: 1;
}
.change-map-type {
  position: absolute;
  right: 50px;
  bottom: 10px;
  z-index: 2;
}
ul li {
  list-style: none;
}
.info {
  z-index: 999;
  width: auto;
  min-width: 22rem;
  padding: 0.75rem 1.25rem;
  margin-left: 1.25rem;
  position: fixed;
  top: 1rem;
  background-color: #fff;
  border-radius: 0.25rem;
  font-size: 14px;
  color: #666;
  box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);
}
.drawing-panel {
  z-index: 999;
  position: fixed;
  top: 20px;
  right: 20px;
  border-radius: 0.25rem;
  height: 47px;
  box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);
}
.bmap-btn {
  border-right: 1px solid #d2d2d2;
  float: left;
  width: 64px;
  height: 100%;
  background-image: url(http://api.map.baidu.com/library/DrawingManager/1.4/src/bg_drawing_tool.png);
  cursor: pointer;
}
.drawing-panel .bmap-marker {
  background-position: -65px 0;
}
.drawing-panel .bmap-polyline {
  background-position: -195px 0;
}
.drawing-panel .bmap-rectangle {
  background-position: -325px 0;
}
.drawing-panel .bmap-polygon {
  background-position: -260px 0;
}
.drawing-panel .bmap-circle {
  background-position: -130px 0;
}
</style>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壳炎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逼侦,更是在濱河造成了極大的恐慌匿辩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榛丢,死亡現(xiàn)場(chǎng)離奇詭異铲球,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晰赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門稼病,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掖鱼,你說我怎么就攤上這事然走。” “怎么了戏挡?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵丰刊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我增拥,道長(zhǎng)啄巧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任掌栅,我火速辦了婚禮秩仆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾封。我一直安慰自己澄耍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布晌缘。 她就那樣靜靜地躺著齐莲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磷箕。 梳的紋絲不亂的頭發(fā)上选酗,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音岳枷,去河邊找鬼芒填。 笑死,一個(gè)胖子當(dāng)著我的面吹牛空繁,可吹牛的內(nèi)容都是我干的殿衰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盛泡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼闷祥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起傲诵,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤凯砍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掰吕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體果覆,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年殖熟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了局待。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菱属,死狀恐怖钳榨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纽门,我是刑警寧澤薛耻,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站赏陵,受9級(jí)特大地震影響饼齿,放射性物質(zhì)發(fā)生泄漏饲漾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一缕溉、第九天 我趴在偏房一處隱蔽的房頂上張望考传。 院中可真熱鬧,春花似錦证鸥、人聲如沸僚楞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉褐。三九已至,卻和暖如春鸟蜡,著一層夾襖步出監(jiān)牢的瞬間膜赃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工矩欠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留财剖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓癌淮,卻偏偏與公主長(zhǎng)得像躺坟,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乳蓄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容