美文网首页iOS之封装集成
iOS百度地图控制地图显示比例在屏幕上显示所有的大头针

iOS百度地图控制地图显示比例在屏幕上显示所有的大头针

作者: 喵喵退后 | 来源:发表于2016-09-07 22:54 被阅读2678次

    前段时间要做一个在地图上显示所有员工的当前位置,当然我觉得这个需求有点变态,如果一个人在南极,一个在北极呢.当然这种情况不太能出现啊哈哈..
    以下是我的解决办法望遇见同样问题的伙伴多个参考,当然大家有好的建议可以一起切磋。

    • 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;
              }
           }    
    }
    

    实现起来比较复杂,要实现这种需求并不复杂,百度地图上提供的有点聚合功能,就是在点比较多的情况下,这些点分布有比较广的情况下,使用点聚合,多个点聚合成一个点,通过手势缩放显示更多的点。

    相关文章

      网友评论

      • 温暖的阳光_5353:您好,我使用 [_mapView setZoomLevel:j+5]; 假如设置j+5 = 7,但是我打印出来的却不是7,是11,这是怎么回事?
        喵喵退后:那你就加1,不要加5了
      • Tomboy_Anan:留个爪. 解决了问题.:relieved: :relieved:
        喵喵退后:@Fan_人 有什么能帮助你的吗
        manofit:你好,我现在也遇到这个问题不知道怎么实现,能把代码贴出来参考下吗?
        喵喵退后:@Tombay ::blush: :blush:
      • 蚂蚁牙齿不黑:不是说百度地图有这个自适应比例尺的借口吗
        follow_:有的 在 BMKMapView.h文件中去找, showAnnotations,有注释
        follow_:@喵喵退后 是有。OC 的 - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated; 在 BMKMapView.h文件中去看注释,我已经这样做了。
        喵喵退后:@阳光暖暖的_ 有吗?我没找见啊 你要是找到给我发一下啊
      • xgou: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];

        请问这个数据,怎么获取到的,如果百度地图sdk变了呢,这个数据就不适用了吧?
        喵喵退后:@xgou 现在百度地图点聚合功能也能实现 你可以看看
        喵喵退后的大爷:@喵喵退后 我侄女说的对 :clap:
        喵喵退后:@xgou 地图比例尺级别,在手机上当前可使用的级别为3-20级 这个是根据比例尺计算出来的 应该不会有变化 如果有还是可以根据比例尺修改的 :smile:

      本文标题:iOS百度地图控制地图显示比例在屏幕上显示所有的大头针

      本文链接:https://www.haomeiwen.com/subject/tmfsettx.html