iphone - MKMapView 缩放和区域

标签 iphone cocoa-touch mapkit zooming

我熟悉使用 Google Maps Javascript API。最近我开始在 iPhone 项目中使用 MapKit 框架,但我很难弄清楚缩放和在 map 上设置区域。

在 Google Maps API 中,我曾经使用整数缩放级别(如 8、9、10)以及简单的函数 setZoom()。我在 MapKit 框架中看到的唯一等效方法是 setRegion:animated。据我了解,我需要设置区域跨度的纬度和经度“增量”值来指定缩放级别。但我真的不知道这些值代表什么(我阅读了文档)。

当我使用 MKMapView 委托(delegate)并跟踪 RegionDidChange 委托(delegate)方法结果中的跨度值时,结果似乎彼此不相关。当我缩小并看到跨度增量值按照文档中指定的方式增加时,这是可以的。但突然我拖动 map 而不缩放,增量值变成 0.0。

有人可以解释一下这些跨度和增量的引用点是什么吗?或者是否有任何算法可以将整数缩放级别(如 9)转换为这些增量值?

作为一个额外的问题,有没有办法在 MKMapView 上指定最小-最大缩放级别:)

谢谢

最佳答案

首先,MKMapView 不像 Google map 那样使用/具有一组预定义的缩放级别。

相反,MKMapView 的可见区域是使用 MKCooperativeRegion 来描述的,它由两个值组成:

  1. 中心(区域的中心点),以及
  2. span(中心周围可见区域的大小)。

中心点应该很明显(它是区域的中心点。)

但是,跨度(MKCooperativeSpan)包含:

  1. latitudeDelta(区域代表的垂直距离),以及
  2. longitudeDelta(区域代表的水平距离)。

一个简短的例子。这是一个玩具 MKCooperativeRegion:

  1. 中心:
    • 纬度:0
    • 经度:0
  2. 跨度:
    • 纬度Delta:8
    • 经度增量:6

该区域可以使用其最小和最大坐标来描述,如下所示:

  1. 最小坐标(左下点):
    • 纬度:-4
    • 经度:-3
  2. 最大坐标(右上角点):
    • 纬度:4
    • 经度:3

因此,您可以使用适当大小的 MKCooperativeSpan 来指定中心点周围的缩放级别。作为 Google 数字缩放级别的近似值,您可以对 Google 用于给定缩放级别的跨度大小进行逆向工程,并相应地创建一个跨度。 (Google 以与 MKMapView 相同的方式描述其 View 区域,即中心 + 跨度,因此您可以从 Google map 中提取这些值。)

至于限制区域,你可以用这个委托(delegate)方法来玩:

mapView:regionWillChangeAnimated

例如通过将区域大小调整回您允许的缩放级别。 (有点像表格 View 让您滚动越过边缘,但随后橡皮筋又会回到原位。)但是,您的里程可能会有所不同,因为我没有将其用于此目的。

顺便说一句,OS 3.1 对 MapKit 的某些方面进行了明确的修复/改进,这些方面在 3.0 中给我带来了麻烦。

关于iphone - MKMapView 缩放和区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166444/

相关文章:

iphone - 在 UITableView 中加载 plist

objective-c - UITableViewRowAnimation 自定义动画

ios - iOS 上的离线反向地理编码

ios - Swift MKMapView 有时会变为 nil 并且应用程序崩溃

ios - iOS6 上 MapKit 的性能问题

iphone - iOS 上的系统级点击模拟

ios - 在ios sdk中将标签文本显示为段落

cocoa - 使用 NSURLConnection 强制 HTTP v1.0 请求

iphone - 401 未经授权在 iPhone 上使用带有 twitter 的 oauth

iphone - Facebook 设置 iOS 6 - 应用程序名称未显示在允许应用程序列表中