我需要获得某种缩放因子,告诉我地图缩放了多少(每当地区发生变化时)。
我的第一个想法是使用跨度的delta纬度或经度值。我会跟踪“旧”值,然后在地图区域更改时更新值,并将比率与旧值进行比较。
我正在使用以下委托方法:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
// Get the new value
CLLocationDegrees newdlat = mapView.region.span.latitudeDelta;
// Find the zoom ratio (use longitude instead?)
CGFloat zoomRatio = newdlat / olddlat;
// Update the old value (defined elsewhere)
olddlat = newdlat;
}
在这种情况下,我没有使用经度delta,因为我认为它会按比例缩放到纬度,这会产生相同的比率(这是错误的吗?)。
问题是当我在滚动地图时检查经度和纬度增量的值(没有缩放)时,值会略有变化。如果地图没有缩放,跨度值是否应该保持不变?也许我误解了一些事情。
由于这种微小的变化,我担心我的缩放比率不够准确无法依赖(最终我会用它来用地图缩放注释图像)。
我的主要问题是这是一个很好的方法,还是有一种更简单的方法可以忽略?
感谢您的帮助。
答案 0 :(得分:14)
在Breadcrumb示例代码中,使用以下方法计算MKZoomScale。
MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
答案 1 :(得分:1)
在计算比率时,通过使用经度而不是纬度来解决问题。请参阅我对原始帖子的两条评论,了解为何会出现这种情况。
答案 2 :(得分:0)
地球是一个球体。地图是一架飞机。
要在地面上映射地球,必须进行一些失真。
在墨卡托投影中,经度线不会扭曲,但纬线看起来是弯曲的。
因此,经度的增量将涉及恒定值,而纬度增量则不然。因此,在这种情况下“刻度”(度/ mm)取决于测量杆的方向。