Получите TopLeft и BottomRight из MKCoordinateRegion MKMapView

Я проверил свойства в документации для MKCoordinateRegion, MKCoordinateSpan и MKMapView, чтобы увидеть, есть ли способ получить TopLeft и BottomRight Lat Long из вида карты, и я не нашел любой. Я знаю, что интервал дает мне дельту широты и долготы, но есть ли способ получить фактические значения широты TopLeft и BottomRight из вида карты без необходимости выполнять странные вычисления?

Я нашел это.

Не уверен, что это достаточно точно. Есть голоса за это?


person Dave    schedule 17.03.2010    source источник


Ответы (3)


Я не думаю, что эти расчеты можно назвать странными:

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);
person Ole Begemann    schedule 17.03.2010
comment
Спасибо, что поправили меня, Андрей. Я обновил приведенный выше код, так что теперь он должен быть правильным. - person Ole Begemann; 17.10.2011
comment
Разве этот код не нарушается, если регион пересекает международную линию перемены дат или полюса? - person Carlos P; 27.05.2014

Простые вычисления, реализованные в 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)
person Avt    schedule 08.11.2016
comment
@CarlHung Вы имеете в виду, что запад и восток смешались? Если так, я исправил это. - person Avt; 02.12.2016

Вы уверены, что получили + - правильно? Я не получил от этого полезных результатов. Когда я переключил + -, я сделал. Возможно, мой код ошибочен где-то еще;)

Долгота дается как угловое измерение в диапазоне от 0 ° на нулевом меридиане до + 180 ° к востоку и -180 ° к западу. Греческая буква λ (лямбда), [3] [4] используется для обозначения местоположения места на Земле к востоку или западу от нулевого меридиана.

Технически широта - это угловое измерение в градусах (отмеченных °) в диапазоне от 0 ° на экваторе (низкая широта) до 90 ° на полюсах (90 ° северной широты или + 90 ° для северного полюса и 90 ° южной широты или -90 °). ° для Южного полюса).

(Википедия)

person Joseph Tura    schedule 18.08.2010