繁体   English   中英

将MKMapView缩放到CLRegion

Zoom MKMapView to CLRegion

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在iOS5上使用CLGeocoder获取CLPlacemark。 现在我想取一个地标的区域(CLRegion对象)并将我的MKMapView缩放到该区域,这究竟是怎么回事?

我想的逆 ,但似乎没有-locationFromLocationWithDistance:或等效的方法。 我希望没有人说你必须反向使用Haversine公式,因为这看起来有点复杂......

2 个回复

或者,而不是所有的数学,只需使用API​​为此提供的方法。

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([placemark region].center, [placemark region].radius, [placemark region].radius);
[[self mapView] setCenterCoordinate:[placemark region].center animated:NO];

你可以使用这里提供的数学来做到这一点 并为代码

        CLLocationCoordinate2D center = placemark.location.coordinate;
        CLRegion* coreLocationRegion = placemark.region;
        CLLocationDistance radius = coreLocationRegion.radius;
#define kBEARING_NORTH 0.0
#define kBEARING_EAST  .5 * M_PI
#define kBEARING_SOUTH M_PI
#define kBEARING_WEST  1.5 * M_PI

#define kEARTH_RADIUS_M 6371000.0

        // Store the angular distance of each side from the center
        double angDist = radius / kEARTH_RADIUS_M;

        // Convert center lat and lng to radians
        double centerLatRad =  center.latitude * M_PI / 180;
        double centerLngRad = center.longitude * M_PI / 180;

        // Calculate latitude range
        double maxLatRad = asin(sin(centerLatRad) * cos(angDist) +
                                cos(centerLatRad) * sin(angDist) * cos(kBEARING_NORTH));

        double minLatRad = asin(sin(centerLatRad) * cos(angDist) +
                                cos(centerLatRad) * sin(angDist) * cos(kBEARING_SOUTH));

        // Calculate longitude range
        // Longitude range requires coresponding latitudes:
        double tempLatRad;

        // Calculate max longitude
        tempLatRad = asin(sin(centerLatRad) * cos(angDist) +
                          cos(centerLatRad) * sin(angDist) * cos(kBEARING_EAST));

        double maxLngRad = centerLngRad + atan2(sin(kBEARING_EAST) * sin(angDist) * cos(centerLatRad),
                                                cos(angDist) - sin(centerLatRad) * sin(tempLatRad));

        // Calculate min longitude
        tempLatRad = asin(sin(centerLatRad) * cos(angDist) +
                          cos(centerLatRad) * sin(angDist) * cos(kBEARING_WEST));

        double minLngRad = centerLngRad + atan2(sin(kBEARING_WEST) * sin(angDist) * cos(centerLatRad),
                                                cos(angDist) - sin(centerLatRad) * sin(tempLatRad));

        CLLocationDegrees latitudeDelta = (maxLatRad-minLatRad) * 180 / M_PI;
        CLLocationDegrees longitudeDelta = (maxLngRad-minLngRad) * 180 / M_PI;
        MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
        MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
        [self.mapView setRegion: region animated: YES];
1 MKMapView缩放到注释 - annotationVisibleRect

有没有人有一个例子,说明如何使用MKMapView上的annotationVisibleRect属性将MKMapView缩放到所有可见注释的区域? 我已经看到这篇文章提供了一个不错的解决方案,但似乎这个annotationVisibleRect属性将是最简单的解决方案。 ...

2 MKMapView无法缩放到iPad视图

我有一个利用MKMapView的项目,该项目在iPhone上运行良好。 但是,当我在ipad模拟器或实际ipad上运行它时,MKMapView不会缩放以覆盖其视图。 它保留了iPhone的视角。 这是iPhone上的样子-iPhone 上的MKMapView 这就是iPad上的样子- ...

6 公里内的MKMapview缩放级别

我有一个在UIViewController有3件事的应用程序 MapView类 搜索控件-(能够在“地图”视图中搜索任何位置) 滑块-(最小值0km-最大值50Km) 现在,我已经搜索了一个让我们说巴塞罗那的城市。 它将使用地理编码方法进行搜索,我得到了巴塞罗 ...

7 iOS6 MKMapView缩放

我正在尝试让我的MKMapView放大到注释。 我尝试了各种尝试,但是我仍然缩小了我的region 。 确实可以运行,但是地图保持缩小状态。 ...

8 MKMapView不会缩放或设置动画

尝试学习有关MKMapView的方法,但是我遵循了一些教程,但似乎无法将其放大到定义的位置,而是将其加载到以大西洋为中心的整个地图视图中。 我猜测iOS6中发生了一些变化,这意味着我正在使用的教程不再起作用? (这些教程是iOS3-iOS5)。 我已经在Interface Builde ...

9 MKMapView不会滚动,也不会缩放

我有一个MapView并标记了用户位置和附近有其他注释的各种类型的旅游景点。 我希望MapView可滚动和缩放以查看城市的所有注释视图,但是当我移动时,MapView会立即返回中心拍摄,看起来很难看。 这是MapViewController.m中的代码 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM