To get coordinates of the polyline from an MKRoute
, use the getCoordinates:range:
method.
That method is in the MKMultiPoint
class which MKPolyline
inherits from.
That also means this works for any polyline -- whether it was created by you or by MKDirections
.
You allocate a C array big enough to hold the number of coordinates you want and specify the range (eg. all points starting from the 0th).
Example:
//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);
Depending on the route, be prepared for hundreds or thousands of coordinates.
Swift 3 version:
I'm aware this is a very old question, but its still one of the top hits on Google when searching for this issue, with no good Swift solutions, So wanted to share my tiny extension to make life a bit easier by adding a coordinates
property to MKPolyline:
https://gist.github.com/freak4pc/98c813d8adb8feb8aee3a11d2da1373f
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With