百度地图聚合,获取聚合点所包含的点信息
由于项目需求,开发地图时需要对地图点信息进行聚合,而且还需要获取该聚合点下的点有哪些,查看相关资料,并没有对这一问题进行介绍,如何解决这个问题?
在地图初始化时,地图上的点位是我们通过接口,获取点位信息(坐标以及其他信息)形成marker,防止点位过多导致地图加载点比较缓慢,可将每个marekr存入到markers数组,地图初始化聚合,逐步加载。
map.createClusters(makers);`
但如何获取聚合点位下的信息?我们知道marker点是地图上的覆盖物,我们是否可以借助画图工具,框选聚合点,进而获取该聚合点下所包含的信息?
刚开始通过 map.getOverlays() 获取地图上的点位信息,但通过开发者模式发现,该方法获取的是聚合点(不包含聚合下的点)+未聚合的点,聚合点下的信息根本获取不到,于是尝试将地图初始化加载的marker存到一个数组里面,通过框选区域进行过滤:
marker.markerinfo=aa; //aa代表每个点位的信息,如坐标以及其他信息
markerArr.push(marker);
var drawingManager = new BMapLib.DrawingManager(map, {
isOpen: false, //是否开启绘制模式
enableDrawingTool: false, //是否显示工具栏
drawingToolOptions: {
anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
offset: new BMap.Size(5, 5) //偏离值
},
circleOptions: styleOptions, //圆的样式
polylineOptions: styleOptions, //线的样式
polygonOptions: styleOptions, //多边形的样式
rectangleOptions: styleOptions //矩形的样式
});
drawingManager.addEventListener('overlaycomplete', function (e) {
var el=e.currentTarget;
el.close();
});
for (var i=0;i<markerArr.length;i++){
var markerInfo=markerArr[i].markerInfo;
if (markerInfo){
var point=new BMap.Point(markerInfo.longitude,markerInfo.latitude);
if (drawingManager.overlay.containPoint(point)){
//如果点位在画圆的区域,则可以进行存储。
// 所以可以框选聚合点,进行筛选获取聚合点所包含信息。
}
}
获取聚合点所包含点位信息,即可进行下一步操作。
上述只是作为获取聚合点包含点信息参考,实际操作还需参考百度地图API,如有问题欢迎指出。