0
点赞
收藏
分享

微信扫一扫

地图覆盖物的气泡显示


地图上添加的覆盖物过多时,可能会出现相互覆盖的情况,下面采用算法计算根据地图缩放的程度,将坐标相近的覆盖物放入气泡中,气泡上显示覆盖物的数量。


// 计算分组,对数据进行分组处理,按组显示,组内count子节点数量>0附加到第一个元素后面显示列表(可链接触发弹框)
function computeGroup(data){
var mapscale=500;
var _data = data;
for(var i=0;i<_data.length;i=i+1) {
_data[i].childrenIds = _data[i].car_id;
// 已经是followers则不进行计算
// 如果不是followers,则作为分组leaders,分组leader没有leader属性,对后面元素进行判断
if(!_data[i].leader) {
for(var j=i+1;j<_data.length;j=j+1) {
if(!_data[j].leader) {
var distance = getBDistanceByData(_data[i],_data[j]);
if (distance<=mapscale) {
_data[j].leader=_data[i].car_id;
// 子节点数量
if(!_data[i].count) {
_data[i].count = 1;
} else {
_data[i].count = _data[i].count+1;
}
_data[i].childrenIds = _data[i].childrenIds+","+_data[j].car_id;
}
}
}
}
}
return _data;
}
// 根据获取的数据获取高德地图点对象
function getAPoint(obj) {
return new AMap.LngLat(obj.longitude_point, obj.dimensionality_point);
}
// 获取百度地图两点间距(p1,p2为BMap.Point类型)
function getBDistance(p1,p2) {
return map.getDistance(p1,p2);
}
// 根据获取的数据得到地图两点间距(obj1,obj2为json类型)
function getBDistanceByData(obj1,obj2) {
return getBDistance(getAPoint(obj1),getAPoint(obj2));
}



 

举报

相关推荐

0 条评论