vue3 vite项目使用百度地图插件

vue yekong

最近在学习vue3,为了更好的实践,所以着手将手头以前做过的项目升级为vue3来对比看看都有哪些变化。于是将手头的项目数据大屏视频监控智能分析系统进行vue3升级。之前的项目中要引入百度地图vue-baidu-map,这里有些变化要记录一下。vue2项目使用百度地图请查看:vue2 使用百度地图插件vue2-baidu-map

文档地址

插件使用说明。
文档地址

安装依赖

之前的项目是vue2,现在升级为vue3了所以要安装vue-baidu-map-3x

// vue3
$ npm install vue-baidu-map-3x --save

// vue2
$ npm install vue2-baidu-map --save

获取百度地图key

在使用前,您需先申请密钥(ak)才可使用
申请密钥(ak)

引用

引入我们安装的vue-baidu-map-3x

import BaiduMap from "vue-baidu-map-3x";
const app = createApp(App);
app.use(BaiduMap, {
  ak: '你的百度地图AK'
});
app.mount('#app')

使用

在vue3中使用

<baidu-map ref="bmap" :scroll-wheel-zoom="true"
         @ready="handleMapReady" :center="center" :zoom="zoom"
         class="bm-view">
</baidu-map>
  data() {
    return {
      center: {lng: 116.404, lat: 39.915},
      zoom: 15,
      mapStyle: {
        styleJson: [
          {
            'featureType': 'all',
            'elementType': 'geometry',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'building',
            'elementType': 'geometry',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'highway',
            'elementType': 'all',
            'stylers': {
              'lightness': -42,
              'saturation': -91
            }
          },
          {
            'featureType': 'arterial',
            'elementType': 'geometry',
            'stylers': {
              'lightness': -77,
              'saturation': -94
            }
          },
          {
            'featureType': 'green',
            'elementType': 'geometry',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'water',
            'elementType': 'geometry',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'subway',
            'elementType': 'geometry.stroke',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'railway',
            'elementType': 'geometry',
            'stylers': {
              'lightness': -52
            }
          },
          {
            'featureType': 'all',
            'elementType': 'labels.text.stroke',
            'stylers': {
              'color': '#53F1F0'
            }
          },
          {
            'featureType': 'all',
            'elementType': 'labels.text.fill',
            'stylers': {
              'color': '#25487C'
            }
          },
          {
            'featureType': 'manmade',
            'elementType': 'geometry',
            'stylers': {
              'color': '#284A7F'
            }
          },
          {
            'featureType': 'road',
            'elementType': 'geometry',
            'stylers': {
              'color': '#27497E',
              'lightness': -62,
              'saturation': 17
            }
          },
          {
            'featureType': 'subway',
            'elementType': 'geometry',
            'stylers': {
              'lightness': -65
            }
          },
          {
            'featureType': 'railway',
            'elementType': 'all',
            'stylers': {
              'lightness': -40
            }
          },
          {
            'featureType': 'background',
            'elementType': 'geometry',
            'stylers': {
              'color': '#021632',
              'weight': '1',
              'lightness': -29
            }
          }
        ]
      },
    }
},
handleMapReady() {
    const mapInstance = this.$refs.bmap.map;
    // 修改地图主题色
    mapInstance.setMapStyle({styleJson: this.mapStyle.styleJson});
    this.center.lng = 116.404;
    this.center.lat = 39.915;
    this.zoom = 10;
},

百度地图修改地图主题色

个性化地图样式工具

百度地图提供了一个 <a href="http://lbsyun.baidu.com/customv2/index.html" target="_blank" rel="nofollow" title="个性化地图工具">个性化地图工具</a>,你可以在这个工具中进行多种定制,并生成相应的样式代码。

应用个性化样式

生成的样式代码可以在初始化地图时应用。

```javascript
var map = new BMapGL.Map("container");
// 其他初始化代码

// 应用个性化样式
map.setMapStyleV2({
    styleId: '自定义的样式ID'
});
```

或者,你也可以直接把生成的样式 JSON 粘贴进去:

```javascript
map.setMapStyleV2({
  styleJson: [
    // 自定义样式的 JSON 数据
  ]
});
```

点击获取经纬度

<template>
  <div>
    <baidu-map ref="bmap" :scroll-wheel-zoom="true"
               @ready="handleMapReady" :center="center" :zoom="zoom"
               class="bm-view" @click="handleMapClick">
    </baidu-map>
  </div>
</template>

<script>
export default {
  data() {
    return {
      center: {lng: 116.404, lat: 39.915}, // 地图中心点经纬度
      zoom: 15, // 地图缩放级别
    };
  },
  methods: {
    handleMapReady({ BMap, map }) {
      // 地图初始化后的操作
      // ...
    },
    handleMapClick(e) {
      // 获取经纬度
      const { lng, lat } = e.point;
      console.log(`点击位置的经度是: ``{lng}, 纬度是: ``{lat}`);
    },
  },
};
</script>

<style>
.bm-view {
  width: 100%;
  height: 500px;
}
</style>

渲染自定义图片

渲染自定义图片

设备列表

[{
    name: '设备1',
    id: '1',
    status: 1,
    value: [116.42599051888418, 39.91306312138842]
}, {
    name: '设备2',
    id: '2',
    status: 0,
    value: [116.41097085075735, 39.930051107522615]
}, {
    name: '设备3',
    id: '3',
    status: 1,
    value: [116.37518235923983, 39.905425443934355]
}, {
    name: '设备4',
    id: '4',
    status: 0,
    value: [116.40335322003274, 39.91749036745209]
}, {
    name: '设备5',
    id: '5',
    status: 1,
    value: [116.43425492957599, 39.91660494131743]
}]

根据status渲染不同的图片

import monitoring_green from '../../assets/home/monitoring_green.png'
import monitoring_red from '../../assets/home/monitoring_red.png'
handleMapReady({ BMap, map }) {
  const mapInstance = this.$refs.bmap.map;
  // 修改地图主题色方法2
  mapInstance.setMapStyleV2({
    styleId: '9985b1b9b3c53e2a39308e8a6d3fdc0d'
  });
  // 地图初始化完成后的回调
  this.list.forEach(device => {
    const point = new BMap.Point(device.value[0], device.value[1]);

    // 根据状态选择图标
    const iconUrl = device.status === 1 ? monitoring_green : monitoring_red;

    const icon = new BMap.Icon(iconUrl, new BMap.Size(73, 83)); // 设置图片尺寸
    const marker = new BMap.Marker(point, { icon: icon });

    // 可选:添加信息窗口
    const infoWindow = new BMap.InfoWindow(`<p>${device.name}</p>`);
    marker.addEventListener('click', function() {
      this.openInfoWindow(infoWindow);
    });

    map.addOverlay(marker); // 将标注添加到地图中
  });
},

效果截图

引用最终效果截图

vue3 vite项目使用百度地图插件

喜欢