地图覆盖物的气泡显示

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

// 计算分组,对数据进行分组处理,按组显示,组内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));
}

 

你可能感兴趣的:(地图)