2014-02-18 18 views
21

Ich versuche einen Weg zu finden, alle Breiten- und Längengrade von einem MKPolyline zu bekommen, das auf einer MKMapView in einer iOS App gezeichnet wird.Breiten- und Längengrad von MKPolyline

Ich weiß, dass die MKPolyline keine Breiten- und Längenpunkte speichert, aber ich bin auf der Suche nach einer Möglichkeit, ein Array aus Lat und Long zu erstellen, das MKPolyline auf der Karte anfassen würde.

Hat jemand konkrete Lösungsmöglichkeiten?

Danke

EDIT: Nach der ersten Antwort zu sehen (danke) Ich glaube, ich besser erklären müssen, was mein Code tun:

  1. ersten I "calculateDirectionsWithCompletionHandler" anrufen ein Objekt MKDirections
  2. Ich bekomme zurück MKRoute Objekt, das eine "Polylinie" Eigenschaft hat.
  3. dann nenne ich "addOverlay" auf dem mapview in der Polylinie aus dem Objekt MKRoute vorbei

Das ist alles.

Also habe ich schon eine Polylinie für mich gebaut. Ich möchte also alle Punkte, die in der Polylinie gefunden werden, irgendwie erhalten und sie auf einen Breitengrad und eine Länge abbilden ...

Antwort

42

Um Koordinaten der Polylinie von MKRoute zu erhalten, verwenden Sie die getCoordinates:range: Methode.
Diese Methode ist in der MKMultiPoint Klasse, die MKPolyline erbt.

Das bedeutet auch, dass dies für jede Polylinie funktioniert - unabhängig davon, ob sie von Ihnen erstellt wurde oder unter MKDirections.

Sie ordnen ein C-Array zu, das groß genug ist, um die Anzahl der gewünschten Koordinaten aufzunehmen und den Bereich anzugeben (z. B. alle Punkte beginnend mit der 0).

Beispiel:

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

Je nach Route, für Hunderte oder Tausende von Koordinaten hergestellt werden.

+0

RECHTS aUF !!! Danke! FUNKTIONIERT! – zumzum

8

Swift 3-Version:

Ich bin mir bewusst, dies ist eine sehr alte Frage, aber es ist immer noch einer der Top-Hits auf Google, wenn für dieses Problem suchen, ohne gute Swift Lösungen, wollte Also meine teilen winzige Verlängerung ein bisschen leichter machen das Leben durch eine coordinates Eigenschaft MKPolyline Zugabe:

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

+1

Danke! Funktioniert auch in Swift 4. – rjcarr