我熟悉使用 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 来描述的,它由两个值组成:
- 中心(区域的中心点),以及
- span(中心周围可见区域的大小)。
中心点应该很明显(它是区域的中心点。)
但是,跨度(MKCooperativeSpan)包含:
- latitudeDelta(区域代表的垂直距离),以及
- longitudeDelta(区域代表的水平距离)。
一个简短的例子。这是一个玩具 MKCooperativeRegion:
- 中心:
- 纬度:0
- 经度:0
- 跨度:
- 纬度Delta:8
- 经度增量:6
该区域可以使用其最小和最大坐标来描述,如下所示:
- 最小坐标(左下点):
- 纬度:-4
- 经度:-3
- 最大坐标(右上角点):
- 纬度: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/