Подтвердить что ты не робот

Широта и долгота от MKPolyline

Я пытаюсь найти способ получить все точки широты и долготы от MKPolyline, нарисованного на MKMapView в приложении iOS.

Я знаю, что MKPolyline не сохраняет точки широты и долготы, но я ищу способ построить массив lat и долго MKPolyline коснется карты.

У кого-нибудь есть конкретные возможные решения?

Спасибо

EDIT: Увидев первый ответ (спасибо), я думаю, мне нужно лучше объяснить, что делает мой код:

  • сначала я вызываю calculateDirectionsWithCompletionHandler "в объект MKDirections
  • Я возвращаю объект MKRoute, который имеет свойство полилиния.
  • то я вызываю addOverlay "в mapview , проходящем в полилинии из объекта MKRoute

Что все.

Итак, у меня уже есть полилиния, построенная для меня. Поэтому я хотел бы получить все точки, найденные в полилинии, и отобразить их на лат и долго...

4b9b3361

Ответ 1

Чтобы получить координаты полилинии от MKRoute, используйте метод getCoordinates:range:.
Этот метод находится в классе MKMultiPoint, который наследует MKPolyline.

Это также означает, что это работает для любой полилинии - независимо от того, была ли она создана вами или с помощью MKDirections.

Вы выделяете массив C, достаточно большой, чтобы удерживать нужное количество координат и указывать диапазон (например, все точки, начиная с 0-го).

Пример:

//route is the MKRoute in this example
//but the polyline can be any MKPolyline

NSUInteger pointCount = route.polyline.pointCount;

//allocate a C array to hold this many points/coordinates...
CLLocationCoordinate2D *routeCoordinates 
    = malloc(pointCount * sizeof(CLLocationCoordinate2D));

//get the coordinates (all of them)...
[route.polyline getCoordinates:routeCoordinates 
                         range:NSMakeRange(0, pointCount)];

//this part just shows how to use the results...
NSLog(@"route pointCount = %d", pointCount);
for (int c=0; c < pointCount; c++)
{
    NSLog(@"routeCoordinates[%d] = %f, %f", 
        c, routeCoordinates[c].latitude, routeCoordinates[c].longitude);
}

//free the memory used by the C array when done with it...
free(routeCoordinates);

В зависимости от маршрута будьте готовы к сотням или тысячам координат.

Ответ 2

Версия Swift 3:

Я знаю, что это очень старый вопрос, но его все еще один из лучших хитов в Google при поиске этой проблемы без хороших решений Swift. Поэтому мне хотелось поделиться своим крошечным расширением, чтобы сделать жизнь немного легче добавление свойства coordinates в MKPolyline:

https://gist.github.com/freak4pc/98c813d8adb8feb8aee3a11d2da1373f