Рассчитать радиус в метрах с помощью mapkit - PullRequest
5 голосов
/ 06 июля 2010

Мне нужно знать расстояние (в километрах) от карты центра до другой стороны экрана (и при изменении масштаба расстояние изменится).

Мне нужно реализовать эту функцию в этой функции

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
}

Есть идеи, как мне это сделать?

Спасибо

Ответы [ 2 ]

18 голосов
/ 09 июля 2010

MkMapView имеет свойства с именем centerCoordinate (CLLocationCoordinate2D) и региона (MKCoordinateRegion).Region - это структура, которая:

typedef struct {
    CLLocationDegrees latitudeDelta;
    CLLocationDegrees longitudeDelta;
}MKCoordinateSpan

Вы должны иметь возможность создать другую точку на основе centerCoordinate, скажем, добавив latitudeDelta к своему свойству latitude или centerCoordinate, и вычислить расстояние с помощью метода CLLocation:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

Примерно так

MkMapView * mapView; // init somewhere
MKCoordinateRegion region = mapView.region;
CLLocationCoordinate2D centerCoordinate = mapView.centerCoordinate;
CLLocation * newLocation = [[[CLLocation alloc] initWithLatitude:centerCoordinate.latitude+region.span.latitudeDelta longitude:centerCoordinate.longitude] autorelease];
CLLocation * centerLocation = [[[CLLocation alloc] initWithLatitude:centerCoordinate.latitude:longitude:centerCoordinate.longitude] autorelease];
CLLocationDistance distance = [centerLocation distanceFromLocation:newLocation]; // in meters

И просто вычисляйте каждый раз, когда делегат запускает определенный метод (решите, какой вам нужен: MKMapViewDelegate)

0 голосов
/ 13 июня 2016

Поскольку прямоугольники не являются кругами, вы не можете получить радиус.

Но вы все равно можете получить самое отдаленное расстояние от центра региона. Повторное использование той же идеи, что и выше, но в быстрое расширение.

extension MKCoordinateRegion {
    func distanceMax() -> CLLocationDistance {
        let furthest = CLLocation(latitude: center.latitude + (span.latitudeDelta/2),
                             longitude: center.longitude + (span.longitudeDelta/2))
        let centerLoc = CLLocation(latitude: center.latitude, longitude: center.longitude)
        return centerLoc.distanceFromLocation(furthest)
    }
}

Использование

let radius = mapView.region.distanceMax()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...