前段时间要做一个在地图上显示所有员工的当前位置,当然我觉得这个需求有点变态,如果一个人在南极,一个在北极呢.当然这种情况不太能出现啊哈哈..
以下是我的解决办法望遇见同样问题的伙伴多个参考,当然大家有好的建议可以一起切磋。
- 1.获取所有的点的经纬度
- 2.通过for循环遍历这些点;
- 3.求最大值最小值(注意这里求得最大最小值是经纬度乘积的最大最小值);
- 4.计算最小经纬度和最大经纬度两点之间的距离(百度地图API上有计算两个坐标点的物理距离)
BMKMapPoint point1 = BMKMapPointForCoordinate(CLLocationCoordinate2DMake(39.915,116.404));
BMKMapPoint point2 = BMKMapPointForCoordinate(CLLocationCoordinate2DMake(38.915,115.404));
CLLocationDistance distance = BMKMetersBetweenMapPoints(point1,point2);
- 5.通过计算出来的距离插入到以下数据中看符合那个阶段,求出来的那个段就是百度地图的显示比例
//计算最小经纬度和最大经纬度两点之间的距离
int dictance = [self getDistance];
//这个数组就是百度地图比例尺对应的物理距离,其中2000000对应的比例是3,5对应的是21;可能有出入可以根据情况累加
NSArray *zoomLevelArr = [[NSArray alloc]initWithObjects:@"2000000", @"1000000", @"500000", @"200000", @"100000", @"50000", @"25000", @"20000", @"10000", @"5000", @"2000", @"1000", @"500", @"200", @"100", @"50", @"20", @"10", @"5", nil];
for (int j=0; j<zoomLevelArr.count; j++) {
if (j + 1 < zoomLevelArr.count) {
if (dictance < [zoomLevelArr[j] intValue] && dictance > [zoomLevelArr[j+1] intValue] ) {
[_mapView setZoomLevel:j+5];
break;
}
}
}
实现起来比较复杂,要实现这种需求并不复杂,百度地图上提供的有点聚合功能,就是在点比较多的情况下,这些点分布有比较广的情况下,使用点聚合,多个点聚合成一个点,通过手势缩放显示更多的点。
网友评论
请问这个数据,怎么获取到的,如果百度地图sdk变了呢,这个数据就不适用了吧?