2014-02-18 6 views
21

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

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

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

Спасибо

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

  1. первый я называю «calculateDirectionsWithCompletionHandler» на объект MKDirections
  2. Я возвращаюсь Объект MKRoute, который имеет «polyline».
  3. тогда я называю «addOverlay» на MapView , проходящей в полилинии из MKRoute объекта

Это все.

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

ответ

42

Чтобы получить координаты полилинии от 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); 

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

+0

нА ПРАВО !!! спасибо! РАБОТАЕТ! – zumzum

8

Swift 3 версия:

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

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

+1

Спасибо! Работает и в Swift 4. – rjcarr

Смежные вопросы