Conversione degli oggetti CLLocation a struct MKMapPoint
-
26-10-2019 - |
Domanda
Vorrei creare un MKPolygon
alla visualizzazione su un MKMapView
. Il mio problema è che io non sono in grado di capire come farlo.
So che per creare un MKPolygon
devo creare un gruppo di struct MKMapPoint
e metterli in un array e chiamare il metodo della classe polygonWithPoints
.
Il mio problema è che ho un NSArray
contenente oggetti CLLocation
che hanno coordinate.latitude
e coordinate.longitude
proprietà.
Come faccio a convertire uno per uno a una struct MKMapPoint
?
Soluzione
Se si dispone di un NSArray
di oggetti contenenti coordinate, sarà più facile da usare il metodo polygonWithCoordinates:count:
invece di polygonWithPoints:count:
.
Il metodo polygonWithCoordinates:count:
accetta una matrice C di struct CLLocationCoordinate2D
. La proprietà coordinate
in un oggetto CLLocation
è anche un CLLocationCoordinate2D
.
Se si desidera continuare a utilizzare polygonWithPoints:count:
, è possibile utilizzare la funzione di MKMapPointForCoordinate
per convertire la proprietà coordinate
nella CLLocation
a un MKMapPoint
.
Con entrambi i metodi è innanzitutto creare una matrice C della struct appropriata, scorrere l'NSArray
per impostare ogni elemento dell'array C. Quindi chiamare polygonWithCoordinates
o polygonWithPoints
.
Questa risposta ha un esempio di codice utilizzando polygonWithCoordinates
. In questo esempio, è necessario modificare le due righe nel ciclo for
a:
CLLocation *coordObj = (CLLocation *)[coordinateData objectAtIndex:i];
coords[i] = coordObj.coordinate;
Non dimenticare di implementare il metodo viewForOverlay
delegato (e assicurarsi di proprietà delegate
della vista mappa è impostato).