最近在做百度地图相关的项目,由于要解决大批量点位渲染的问题,所以使用了聚合MarkerClusterer,但是在使用的过程中,碰到很多问题,例如如何获得已经聚合了的marker、给marker设置了label后移动地图或者放大缩小地图时label消失的问题,迫不得已,翻了源码,解决过程如下(附件中包含改好的MarkerClusterer.js文件,可根据自己需求修改):
1、 获取聚合中marker点位的MATCH_
word
word文档格式规范word作业纸小票打印word模板word简历模板免费word简历
_1714347650813_0
1、在声明部分定义一个数组,用来存放聚合后不可见的marker,如图(MarkerClusterer.js文件中)
2、然后在_createClusters方法中初始化数组(MarkerClusterer.js文件中)
3、接着在_addToClosestCluster方法中捕捉已经聚合了的marker,并放大数组_invisibleMarkers中,如下图(MarkerClusterer.js文件中)
4、最后写一个方法,用来获取这个数组,如下(MarkerClusterer.js文件中)
说明:这个方法在使用的时候,需要做一个延迟,比如地图缩小的时候,如果你调用这个方法不会得到结果,最好放到setTimeout中,延迟个100毫秒就可以!(如果有其他方法,希望大家能分享下)
2、 解决聚合中的marker在地图图层移动、放大缩小时label消失的问题
之前在网上看到过一种方法,是注释掉Cluster.prototype.remove方法中的for循环,但是发现这样会有问题,当聚合到最后一个点位的时候,不会清楚最后一个marker的图标,我的解决方法如下(会使用上面的数组_invisibleMarkers):
1、首先在定义marker的时候,给marker定义attribute属性,并将定义好的label放到attribute属性中,用来将来获取,如下图
2、然后在MarkerClusterer.prototype._createClusters方法中加上如图中的代码(MarkerClusterer.js文件中)
说明:这个方法非常快,不影响效果,亲测没问题!