百度地图自定义图标点聚合实现与注意事项

1、前因

往往需要用到地图的时候设计都不会使用百度地图自带的覆盖物样式,而是需要我们自己去制作或设计,在上一篇文章中描写了怎么添加与删除自定义覆盖物。(https://blog.csdn.net/weixin_44849078/article/details/89362561)
但是之后想要对自定义覆盖物使用点聚合时却发现不支持,会报错。无奈之下到处看demo,终于找到了曲线救国的方式。

百度地图默认样式
在这里插入图片描述
自定义样式
在这里插入图片描述

2、实现代码

上篇文章中用的是ComplexCustomOverlay来生成自定义覆盖物,这里为了点聚合回到了Marker方法,用的依然是vue。
引入js文件

<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

类参考:http://api.map.baidu.com/library/MarkerClusterer/1.2/docs/symbols/BMapLib.MarkerClusterer.html

// 调用该方法后创建覆盖物
addMapDeviceMarker (deviceObj) {
      // 创建地图点
      var pt = new BMap.Point(deviceObj.lat, deviceObj.lng);
      // 创建自定义图标对象
      var myIcon = new BMap.Icon('../../../static/img/patrol.png', new BMap.Size(43, 55));
      var marker = new BMap.Marker(pt,{icon:myIcon});  // 创建标注
      this.map.addOverlay(marker);
      deviceObj.mapMarker = marker;
      
      // 将覆盖物添加到集合中
      this.markerList.push(marker);
}

点聚合方法调用。

var markerClusterer = new BMapLib.MarkerClusterer(this.map, {markers: this.markerList});

最后效果
在这里插入图片描述
在这里插入图片描述

3、使用了点聚合后要注意的问题

点聚合使用后会有很多改变,之前使用的一些方法会无效,需要另外设置。具体操作以后再写,这里提示一下。

3.1、缩放或移动地图后点的文本标注会消失

使用BMap.Label添加的文本标注会消失,每次变动后需要重新添加文本标注。

3.2、缩放或移动地图后信息窗口会关闭,需要重新打开

3.3、添加删除方法的改变

不再使用addOverlay与removeOverlay进行添加与删除操作,需要用markerClusterer里的方法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Vue中实现百度地图聚合,可以按照以下步骤进行操作: 1. 首先,在Vue项目中安装百度地图的JavaScript API。可以通过在`index.html`文件中添加以下代码来引入百度地图的API: ```html <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=YOUR_API_KEY"></script> ``` 确保替换`YOUR_API_KEY`为你自己的百度地图API密钥。 2. 在Vue组件中创建地图容器,并初始化地图。可以在`mounted`钩子函数中添加以下代码: ```javascript mounted() { const map = new BMap.Map("map-container"); // 创建地图实例 const point = new BMap.Point(经度, 纬度); // 设置地图中心坐标 map.centerAndZoom(point, 15); // 初始化地图,设置地图缩放级别 this.map = map; // 将地图实例保存到组件数据中 } ``` 确保替换`经度`和`纬度`为你希望地图显示的中心坐标。 3. 获取需要聚合的标记数据,并使用百度地图的`MarkerClusterer`类进行聚合。可以在`mounted`钩子函数中添加以下代码: ```javascript mounted() { // ... const markers = []; // 存储标记的数组 // 添加标记地图和markers数组中 yourData.forEach((item) => { const point = new BMap.Point(item.lng, item.lat); const marker = new BMap.Marker(point); map.addOverlay(marker); markers.push(marker); }); // 创建聚合器并设置参数 const markerClusterer = new BMapLib.MarkerClusterer(map, { markers: markers, }); // ... } ``` 确保替换`yourData`为你的标记数据数组,每个标记的经度和纬度分别存储在`item.lng`和`item.lat`中。 4. 在Vue组件中添加地图容器的HTML代码。可以在组件模板中添加以下代码: ```html <template> <div id="map-container" style="width: 100%; height: 400px;"></div> </template> ``` 确保根据需要设置地图容器的宽度和高度。 通过以上步骤,你就可以在Vue项目中实现百度地图聚合效果了。记得在百度地图开放平台申请并获取到API密钥,并替换代码中的`YOUR_API_KEY`。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值