MKMapView:获得相对缩放比例?

时间:2010-06-02 18:09:08

标签: iphone google-maps mkmapview

我需要获得某种缩放因子,告诉我地图缩放了多少(每当地区发生变化时)。

我的第一个想法是使用跨度的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,因为我认为它会按比例缩放到纬度,这会产生相同的比率(这是错误的吗?)。

问题是当我在滚动地图时检查经度和纬度增量的值(没有缩放)时,值会略有变化。如果地图没有缩放,跨度值是否应该保持不变?也许我误解了一些事情。

由于这种微小的变化,我担心我的缩放比率不够准确无法依赖(最终我会用它来用地图缩放注释图像)。

我的主要问题是这是一个很好的方法,还是有一种更简单的方法可以忽略?

感谢您的帮助。

3 个答案:

答案 0 :(得分:14)

在Breadcrumb示例代码中,使用以下方法计算MKZoomScale。

MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;

http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Listings/Classes_BreadcrumbViewController_m.html

答案 1 :(得分:1)

在计算比率时,通过使用经度而不是纬度来解决问题。请参阅我对原始帖子的两条评论,了解为何会出现这种情况。

答案 2 :(得分:0)

地球是一个球体。地图是一架飞机。

要在地面上映射地球,必须进行一些失真。

在墨卡托投影中,经度线不会扭曲,但纬线看起来是弯曲的。

因此,经度的增量将涉及恒定值,而纬度增量则不然。因此,在这种情况下“刻度”(度/ mm)取决于测量杆的方向。