points de latitude et de longitude à partir de MKPolyline

j'essaie de trouver un moyen d'obtenir tous les points de latitude et de longitude d'une MKPolyline dessinée sur un MKMapView sur une application iOS.

je sais que le MKPolyline ne stocke pas les points de latitude et de longitude, mais je cherche un moyen de construire un tableau de lat et long le mkpolyline toucherait sur la carte.

Quelqu'un a des solutions spécifiques?

Merci

modifier: Après avoir vu la première réponse (merci) je pense que je besoin de mieux expliquer ce que mon code est:

  1. j'ai d'abord appeler " calculateDirectionsWithCompletionhandler" sur un MKDirections objet
  2. je serai de retour MKRoute objet qui a un "polyligne" de la propriété.
  3. puis-je appeler " addOverlay" sur la mapview en passant dans le polyligne de la MKRoute objet

C'est tout.

donc, je déjà faites construire un polyligne pour moi. Donc je voudrais obtenir tous les points trouvés dans le polyligne d'une façon ou d'une autre et les mapper à un lat et long...

27
demandé sur zumzum 2014-02-18 21:42:53

2 réponses

Pour obtenir les coordonnées de la polyligne à partir d'un MKRoute,getCoordinates:range: méthode.

Cette méthode est dans le MKMultiPoint classe MKPolyline hérite.

cela signifie également Que cela fonctionne pour n'importe quel polyligne -- s'il a été créé par vous ou par MKDirections.

vous attribuez un tableau C assez grand pour contenir le nombre de coordonnées que vous voulez et spécifiez la portée (par ex. tous les points à partir du 0ème).

Exemple:

//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);

Selon sur la route, être préparé pour des centaines ou des milliers de coordonnées.

48
répondu 2014-02-18 21:14:48

version Swift 3:

je suis conscient que c'est une très vieille question, mais c'est encore l'un des meilleurs hits sur Google lors de la recherche de cette question, avec pas de bonnes solutions Swift, donc j'ai voulu partager ma petite extension pour rendre la vie un peu plus facile en ajoutant un coordinates propriété de MKPolyline:

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

12
répondu Shai Mishali 2017-02-12 11:01:55