百度地图 vue-baidu-map

## 百度地图 vue-baidu-map

1. 百度示例网址:http://lbsyun.baidu.com/jsdemo.htm#webgl4_0

2. 百度JSAPI网址:http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_webgl_1_0.html

#### 引入使用

```vue

//main.js

import BaiduMap from 'common/components/vue-baidu-map'

Vue.use(BaiduMap, {

  // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */

  ak: 'CpmeIdqjNe7lNu74ZGEv6UO2IGQrVcqT'

});

//页面vue

            @ready="handler" class="map"

            v-if="refresh" :ak="ak"

            />

//centers:视角中心点

//zoom:视角范围大小

//@ready:地图加载完成回调函数

//class="map": 需要设置height值

//refresh: 用于强制刷新地图

//ak:页面ak,如全局ak已写,则此处可不需要这个属性

//地图回调

  handler({BMap, map}) {

        let vm = this;

        vm.BMap = BMap;

        vm.map = map;

......

// 添加鼠标滚动缩放

        map.enableScrollWheelZoom();

        //添加比例尺控件

        map.addControl(new BMap.ScaleControl());

        //添加地图类型控件

        map.addControl(new BMap.MapTypeControl());

        //设置地图皮肤

        map.setMapStyleV2({styleJson: styleJson});

}

//添加Marker

addMarker(item, index) {

        let vm = this

        let point = item.point ? new vm.BMap.Point(item.point.lng, item.point.lat) : new vm.BMap.Point(item.longitude, item.latitude);

        let marker = new vm.BMap.Marker(point, {

            icon: new vm.BMap.Icon('图片路径', new vm.BMap.Size(50, 50)),

            offset: new vm.BMap.Size(10, -16)

          })

        vm.addLabel(marker, item); //添加label

        vm.map.addOverlay(marker);//挂载标注

},

//添加标注label

  addLabel(markers, item) {

        let vm = this

        let label = new vm.BMap.Label(item['name'], {offset: new vm.BMap.Size(24, -20)})

// label设置样式

          label.setStyle({

            color: "black",

            fontSize: "12px",

            height: '34px',

            border: null,

            padding: '5px',

            background: `url(${labels})  `

          });

        markers.setLabel(label);

},

  //添加标注title

    addTitle(markers, point, item) {

        let vm = this

        let opts = {

          width: 200,    // 信息窗口宽度

          height: 100,    // 信息窗口高度

          title: item.name, // 信息窗口标题

        };

        let sContent = `

            ${item && item.title ? item.title : '标题'}

${item && item.detail ? item.detail : '内容'}
`;

        let infoWindow = new vm.BMap.InfoWindow(sContent, opts);  // 创建信息窗口对象

        markers.addEventListener("mouseover", function (e) {

          vm.map.openInfoWindow(infoWindow, point); //开启信息窗口

        });

        markers.addEventListener("mouseout", function (e) {

          vm.map.closeInfoWindow(infoWindow, point); //关闭信息窗口

        });

},

  //添加线路polyline

addPolyline(){

let path = 'M0 0 L-4 2 L0 -2 L4 2 Z';

        let sy = new vm.BMap.Symbol(path, {

          fillColor: "#fff",

          fillOpacity: 0.6,

          scale: 0.8,//图标缩放大小

          strokeColor: "#fff",//设置矢量图标的线填充颜色

          strokeWeight: 0,//设置线宽

        });

        let icons = new vm.BMap.IconSequence(sy, '5%', '4%');

let polyline = new vm.BMap.Polyline(res, {

          icons: [icons],//添加线路箭头

          strokeColor: vm.searchModel.color,

          enableClicking: false,//是否响应点击事件,默认为true

          strokeWeight: '6',//折线的宽度,以像素为单位

          strokeOpacity: 0.5,//折线的透明度,取值范围0 - 1

        });

        vm.map.addOverlay(polyline);

        vm.map.setViewport(res)//根据提供的地理区域或坐标设置地图视野,调整后的视野会保证包含提供的地 理区域或坐标

},

//添加路书LuShu

npm i bmaplib.lushu

import LuShu from 'bmaplib.lushu'

addLushu(){

  let myIcon = new vm.BMap.Icon(

  car, new vm.BMap.Size(50, 20), {    //小车图片

          imageOffset: new vm.BMap.Size(0, 0),    //图片的偏移量。为了是图片底部中心对准坐标点。

        });

          let lushu = new LuShu(vm.map, ['轨迹集合'], {

            defaultContent: "",

            autoView: true, //是否开启自动视野调整,如果开启那么路书在运动过程中会根据视野自动调整

            icon: myIcon,

            enableRotation: true, //是否设置marker随着道路的走向进行旋转

            speed: 100,

            landmarkPois: []

          });

          lushu.start();

}

  //获取定位

  getPosition(BMap, map){

new BMap.Geolocation().getCurrentPosition(function (r) {console.log(r)})

}

  //强制刷新地图

    refreshMap() {

        this.refresh = false;

        this.$nextTick(() => {

          this.refresh = true

        })

}

```

#### 阶段总结

1. 地图的各方法单独抽离,以备使用

2. 地图要设置高度,不然不显示

3. 经纬度使用时,检查是否NEW过,否则不显示

你可能感兴趣的:(百度地图 vue-baidu-map)