从MKCoordinateRegion MKMapView获取左上角和右下角

14

我查看了MKCoordinateRegionMKCoordinateSpanMKMapView文档中的属性,想知道是否有一种方法可以从地图视图中获取左上角右下角的经纬度,但是未找到任何信息。我知道span可以给出经纬度差值,但是否有一种方法可以从地图视图中获取实际的左上角右下角经纬度,而不必进行奇怪的计算?

我找到了这个

不确定这是否足够准确。有没有人支持这种方式?

3个回答

29

我认为这些计算并不奇怪:

CLLocationCoordinate2D center = region.center;
CLLocationCoordinate2D northWestCorner, southEastCorner;
northWestCorner.latitude  = center.latitude  + (region.span.latitudeDelta  / 2.0);
northWestCorner.longitude = center.longitude - (region.span.longitudeDelta / 2.0);
southEastCorner.latitude  = center.latitude  - (region.span.latitudeDelta  / 2.0);
southEastCorner.longitude = center.longitude + (region.span.longitudeDelta / 2.0);

1
谢谢你的纠正,Andriy。我已经更新了上面的代码,现在应该是正确的了。 - Ole Begemann
11
如果该区域跨越国际日期变更线或极点,这段代码是否会出错? - Carlos P

7

这是一个使用 Swift 3.0 实现的直观计算扩展:

extension MKCoordinateRegion {
    var northWest: CLLocationCoordinate2D {
        return CLLocationCoordinate2D(latitude: center.latitude + span.latitudeDelta  / 2,
                                      longitude: center.longitude - span.longitudeDelta / 2)
    }
    var northEast: CLLocationCoordinate2D {
        return CLLocationCoordinate2D(latitude: center.latitude + span.latitudeDelta  / 2,
                                      longitude: center.longitude + span.longitudeDelta / 2)
    }
    var southWest: CLLocationCoordinate2D {
        return CLLocationCoordinate2D(latitude: center.latitude - span.latitudeDelta  / 2,
                                      longitude: center.longitude - span.longitudeDelta / 2)
    }
    var southEast: CLLocationCoordinate2D {
        return CLLocationCoordinate2D(latitude: center.latitude - span.latitudeDelta  / 2,
                                      longitude: center.longitude + span.longitudeDelta / 2)
    }
}

使用方法:

var region: MKCoordinateRegion = ... some region here
print("North - West", region.northWest)

1
@CarlHung 你的意思是西方和东方搞混了吗?如果是,我已经修复了。 - Avt

0

你确定你把+-搞对了吗?我用那个没有得到有用的结果。当我改成+ -时,就可以了。不过可能是我的代码在其他地方有问题 ;)

经度是一个角度测量值,从本初子午线的0°到东经+180°和西经−180°。希腊字母λ(lambda)[3][4]用于表示地球上某个地点相对于本初子午线的东西位置。

技术上,纬度是一个角度测量值,以度为单位(标记为°),从赤道的0°(低纬度)到极点的90°(90°N或北极的+90°和90°S或南极的−90°)。

(维基百科)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接