Vue中Baidu地图API提取整合

看了很多文章对Vue中如何使用写的都很乱,下面贴一下自己做了简单的方法提取,还有开发过程中遇到的神坑。

注意事项
  • 首先要在index.html 的head标签中要挂载<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2.0&ak=str&t=20170517145936"></script>str为申请获得的一段字符串,v为版本也需要添加上。
  • 百度地图中如果需要添加实时交通,这类悬浮框的控件,需要另外引入CSS、JS文件,如:TrafficControl_min.jsTrafficControl_min.css,热地图需引入heatmap.js
  • 百度地图热力图,需要大量坐标才能生成不同色块,methods方法中的addHot是我自己写的随机生成坐标点函数,根据地图中心点来计算。

正文

Vue实例上的methods存储各个空间的方法,在mounted中进行初始化渲染。

功能目录
  • addLineVideo --地图中心处生成牵引线,线条起始及终点位置固定,自己写的比较粗糙。
  • mapMoveSelf--地图缩放及视觉中心点地理位置重置。
  • addIcon-- 地图上的图标。
  • addMenu-- 添加放大缩小控件
  • addLocaPosition-- 添加定位控件
  • addControl -- 添加工具条,比例尺控件
  • addControlCityList -- 添加城市下拉列表控件
  • addLine -- 添加曲线
  • addCustControl -- 自定义放大缩小悬浮控件
  • addLoad -- 实时路况 需要引入额外文件
  • addHot -- 热力图 需要引入额外文件
methods部分挂在各功能函数
mapMoveSelf(map){
    console.log(map)
    setTimeout(function(){
        map.panTo(new BMap.Point(119.906441,29.457793));
    }, 1000);
    setTimeout(function(){
        map.setZoom(14);
    },4000);
},
addIcon(map){
    var points = [
            [120.018874,29.48683],
            [119.923671,29.514494],
            [119.906441,29.457793],
            [119.965029,29.403953],
            [119.915029,29.303953],
            [119.935029,29.203953],
            [119.945029,29.453953],
            [119.765029,29.363953]
        ];
    // 向地图添加标注
    for( var i = 0;i < points.length; i++){
    //定义新图标
    var myIcon = new BMap.Icon(require("../../../assets/images/wifi.png"), new BMap.Size(44, 44), {
    // 指定定位位置
    offset: new BMap.Size(10, 25),
    // 当需要从一幅较大的图片中截取某部分作为标注图标时,需要指定大图的偏移位置 
    //imageOffset: new BMap.Size(0, 0 - i * 25)  设置图片偏移 
    });
    var point = new BMap.Point(points[i][0],points[i][1]);
    // 创建标注对象并添加到地图 
    var marker = new BMap.Marker(point,{icon: myIcon});
    map.addOverlay(marker);
    };
    //添加新图标的监听事件
    marker.addEventListener('click',function(){
        var p = marker1.getPosition();//获取位置
        // alert("点击的位置是:" + p.lng + ',' + p.lat);
    })
},
addMenu(map){
    var menu = new BMap.ContextMenu();

    var txtMenuItem = [
        {
            text:'放大',
            callback:function(){map.zoomIn()}
        },
        {
            text:'缩小',
            callback:function(){map.zoomOut()}
        }
    ];
    for(var i=0; i < txtMenuItem.length; i++){
        menu.addItem(new BMap.MenuItem(txtMenuItem[i].text,txtMenuItem[i].callback,100));
    }
    map.addContextMenu(menu);
},
addLocaPosition(map){
    //添加定位组件
    var geolocationControl = new BMap.GeolocationControl();
    geolocationControl.addEventListener("locationSuccess", function(e){
    // 定位成功事件
    var address = '';
    address += e.addressComponent.province;
    address += e.addressComponent.city;
    address += e.addressComponent.district;
    address += e.addressComponent.street;
    address += e.addressComponent.streetNumber;
    alert("当前定位地址为:" + address);
    });
    geolocationControl.addEventListener("locationError",function(e){
    // 定位失败事件
    alert(e.message);
    });
    map.addControl(geolocationControl)
},
addControl(map){
    //添加工具条、比例尺控件
    map.addControl(new BMap.ScaleControl({anchor:BMAP_ANCHOR_TOP_LEFT}));
    map.addControl(new BMap.NavigationControl());
    map.addControl(new BMap.NavigationControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,type:BMAP_NAVIGATION_CONTROL_SMALL}));
    map.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT,type: BMAP_NAVIGATION_CONTROL_LARGE,enableGeolocation: true}));
},
addControlCityList(map){
    //创建城市下拉列表控件;
    map.addControl(new BMap.CityListControl({
        anchor:BMAP_ANCHOR_BOTTOM_RIGHT,
        offset:new BMap.Size(130,23),
        //切换城市之间事件
        onChangeBefore: function(){
           alert('before');
        },
        //切换城市之后事件
        onChangeAfter:function(){
          alert('after');
        }
    }));
},
addLine(map){
    //添加曲线
    var beijingPosition=new BMap.Point(116.432045,39.910683),
    hangzhouPosition=new BMap.Point(120.129721,30.314429),
    taiwanPosition=new BMap.Point(121.491121,25.127053);
    var point = [beijingPosition,hangzhouPosition,taiwanPosition];

    var curve = new BMapLib.CurveLine(point, {strokeColor:"blue", strokeWeight:3, strokeOpacity:0.5});//创建弧线
    map.addOverlay(curve);//添加到地图上
    curve.enableEditing();//开启编辑功能
},
addCustControl(map){
    //创建自定义放大缩小悬浮控件
    function ZoomControl() {
    //默认停靠位置和偏移量
    this.defaultAnchor = BMAP_ANCHOR_BOTTOM_RIGHT;
    this.defaultOffset = new BMap.Size(50,23);
    }
    //通过JavaScript的prototype属性继承于BMap.Control
    ZoomControl.prototype = new BMap.Control();
    //自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
    //在本方法中创建div容器,并将其添加到地图容器中
    ZoomControl.prototype.initialize = function(map) {
        //创建一个DOM元素
        var div = document.createElement('div');
        //添加文字说明
        div.appendChild(document.createTextNode('放大两级'));
        //添加样式
        div.style.color = '#40C5CC'; 
        div.style.cursor = 'pointer';
        div.style.border = '3px solid gray';
        div.style.backgroundColor = '#eee';
        //绑定事件,点击触发
        div.onclick = function(e) {
            map.setZoom(map.getZoom() + 2);
        }
        //添加DOM元素到地图上
        map.getContainer().appendChild(div);
        //将DOM元素返回
        return div;
    }
    //创建控件
    var myZoomCtrl = new ZoomControl();
    map.addControl(myZoomCtrl)
},
addLoad(map){
    //实时路况
    var ctrl = new BMapLib.TrafficControl({
        showPanel: true //是否显示路况提示面板
    });      
    map.addControl(ctrl);
    ctrl.setAnchor(BMAP_ANCHOR_BOTTOM_RIGHT);  
},
mounted方法中初始化各功能部件
// 百度地图API功能
    // 创建Map实例
    const _self= this;
    var map = new BMap.Map("XSDFXPage",{enableMapClick:true});
    // 初始化地图,设置中心点坐标和地图级别
    map.centerAndZoom(new BMap.Point(120.018874,29.48683), 9);
    // 添加地图类型控件
    // map.addControl(new BMap.MapTypeControl());  
    // 设置地图显示的城市 此项是必须设置的
    map.setCurrentCity("浦江");    
    // 开启鼠标滚轮缩放      
    map.enableScrollWheelZoom(true);
    // 设置定时器,对地图进行自动移动
    // this.mapMoveSelf
    /************************************************
    添加折线
    *************************************************/
    var pointGZ = new BMap.Point(119.923671,29.514494);
    var pointHK = new BMap.Point(110.35,20.02);
    setTimeout(function(){
        var polyline = new BMap.Polyline(
              [pointGZ,pointHK],
              {strokeColor:"blue",strokeWeight:5,strokeOpacity:0.5}
          );
         map.addOverlay(polyline);
     },6000);
    _self.addLoad(map);
     _self.addControl(map);
    _self.addLocaPosition(map);
    /************************************************
    添加自定义控件类,放大ZoomControl
    *************************************************/

    /************************************************
    添加添加城市列表控件
    *************************************************/
     _self.addControlCityList(map);
    /************************************************
    添加新图标
    *************************************************/
     _self.addIcon(map);
    /************************************************
    添加曲线
    *************************************************/

    /************************************************
    给地图添加右键菜单
    *************************************************/
    _self.addMenu(map);

实用工具网站
百度地图·JavaScript
百度地图坐标拾取
百度地图API

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,092评论 8 124
  • 来源:github.com Vue.js开源项目速查表:https://www.ctolib.com/cheats...
    zhangtaiwei阅读 11,598评论 1 159
  • UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于...
    董董董董董董董董董大笨蛋阅读 8,503评论 6 123
  • 一早起来的时候,看到天空只是有些阴沉。等待洗澡后出来,外面已经非常黑了,雨已经下得很密实了。 看看脚边耐心等待的维...
    锦墨hhy阅读 145评论 0 0
  • 月经期结束后要集中做倒立的体式,如肩倒立,手倒立,犁式,桥式肩倒立,孔雀起舞,倒剪式,双腿內收直棍式,可以完全的清...
    慧懂阅读 899评论 0 1