• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 根据位置列表将 MKMapView 缩放到最适合距离的缩放级别

[复制链接]
菜鸟教程小白 发表于 2022-12-13 01:02:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个中心位置,我希望我的 MKMapView 缩放到一个位置列表(纬度/经度)。我想根据此位置列表设置缩放级别(距离),以便同时在 MKMapView 上看到许多这些位置,但缩放级别最小(或最大distance) 这样我的 MKMapView 就不会缩小太多。

假设我有一个包含 10 个位置的列表,但其中一个位置离我的中心位置太远,如果我在 MKMapView 上显示一个位置,它会被缩小很多, 如何计算 MKCoordinateRegionMakeWithDistance 的距离参数?

我希望我能很好地解释我的问题,我认为我很难解释它。

谢谢
索伦



Best Answer-推荐答案


我使用以下解决方案让它工作。

我使用 Great-circle distance公式计算我的中心点和所有找到的纬度/经度点之间的距离,如果这个距离大于我的最小距离和我的最大距离并且大于我的“最后发现的距离”,我将这个距离设置为我的缩放距离.它就像一个魅力,实际上非常简单。

这是我的距离计算代码:

-(double)distanceBetweenLocationsCLLocationCoordinate2D)c1 CLLocationCoordinate2D)c2 {
    int r = 6371 * 1000;//meters
    double dLat = (c2.latitude - c1.latitude) * M_PI / 180;
    double dLon = (c2.longitude - c1.longitude) * M_PI / 180;
    double lat1 = c1.latitude * M_PI / 180;
    double lat2 = c2.latitude * M_PI / 180;

    double a = sin(dLat / 2) * sin(dLat / 2) + sin(dLon / 2) * sin(dLon / 2) * cos(lat1) * cos(lat2);
    double c = 2 * atan2(sqrt(a), sqrt(1 - a));
    double d = r * c;

    return d;
}

这是我的代码,它根据计算的距离缩放到我的中心点:

-(void)zoomToLocation {
    double MAX_DISTANCE = 10000.0;
    double MIN_DISTANCE = 600.0;

    double zoomDistance = MIN_DISTANCE;

    CLLocationCoordinate2D center;
    center.latitude = self.searchLocationLatitude;
    center.longitude = self.searchLocationLongitude;
    BOOL treaterVisible = NO;
    for (Treater *treater in treaters) {
        CLLocationCoordinate2D c2;
        c2.latitude = treater.latitude;
        c2.longitude = treater.longitude;
        double distance = [self distanceBetweenLocations:center :c2];
        if(distance > zoomDistance && distance < MAX_DISTANCE) {
            zoomDistance = distance;
            treaterVisible = YES;
        }
    }

    if(!treaterVisible) {
        zoomDistance = MAX_DISTANCE;
    }

    CLLocationCoordinate2D location;
    location.latitude = self.searchLocationLatitude;
    location.longitude = self.searchLocationLongitude;

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, zoomDistance, zoomDistance);
    MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:region];
    [self.mapView setRegion:adjustedRegion];
}

如果有人需要类似的东西。

最好的问候
索伦

关于ios - 根据位置列表将 MKMapView 缩放到最适合距离的缩放级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772056/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap