2011-04-15 5 views
12

Se necesita ayuda ahora. Puedo dibujar líneas con MKPolyline y MKPolylineView, pero ¿cómo dibujar un arco o líneas de curva entre dos coordenadas en MKMapView? Muchas gracias.Cómo dibujar la línea de arco/curva con MKOverlayView en MKMapView

Solución El final

Por último, me escribió a mí mismo estas conclusiones aquí para ayudar a que lo deseen.

Si desea:

  1. simplemente dibujar trayectoria del arco en el mapa
  2. simplemente dibujar una imagen en el mapa
  3. combinan trayectoria del arco y la imagen como superposición en el mapa

Así las soluciones son:

  1. Hay MKPolyline y MKPolylineView para dibujar líneas, MKPolygon y MKPolygonView para dibujar polígonos, MKCircle y MKCircleView dibujar círculos. Nadie encaja? ¿Dónde hay un arco? Oh si. Ahora la realidad Solución: crear una clase personalizada derivada de MKOverlayPathView y reemplazar el método -createPath, en el -createPath se crea un arco utilizar CGContextAddArcToPoint o demás funciones que le gustan, y asociar el camino que acaba de crear en la propiedad de ruta de MKOverlayPathView y se realizan los trabajos personalizados. Luego agrega MKPolyline en el mapa (¡Sí! Solo MKPolyline!), Luego, en el método -mapView: viewForOverlay:, crea la clase personalizada, tome esa polilínea. Entonces, simplemente ejecútalo, todo se ejecuta como lo desees. ¿Magia? ¡puede dibujar un MKPolyline como un arco!
  2. ¿Es solo una imagen? Use MKAnnotationView. ¡Eso está hecho! ¡puedes hacerlo! ¡Yo creo eso!
  3. En mi problema, quiero dibujar un arco con una imagen en la superposición. Así que creo una clase personalizada conforme al protocolo MKOverlay, y una clase personalizada derivada de MKOverlayView para dibujar esa superposición. ¡Todo funciona bien pero no puedo dibujar ningún camino en el mapa! Establecí el lineWidth en 1,2,3,4 ... ¡pero no funcionó! Ah ... la solución se establece el ancho de línea con MKRoadWidthAtZoomScale (zoomScale) función y se puede ver la ruta! Eso se hace ......

Y algunos consejos aquí:

  1. Uso Core gráfica para dibujar caminos, las coordenadas no MapKit ni coordina UIView!
  2. En las funciones CG sólo tener en cuenta el ancho de línea deben ser convertidos por esta función: MKRoadWidthAtZoomScale (zoomScale)
  3. la esperanza de ayudar a
+0

Hola, estoy intentando tu solución para dibujar una ruta de arco simple en mi mapa pero estoy teniendo algunos problemas ... ¿Podrías mostrarme algún código porque realmente tengo que hacer eso en mi aplicación y no podría encuentre cualquier trabajo hasta ahora ... ¡Gracias de antemano! Ben – Ben

+0

Hola, @Ben. ¿Y qué quieres dibujar en tu mapa? – Shiny

+0

Gracias! ¿A qué te refieres en la parte 1 cuando dices: "Entonces en el método -mapView: viewForOverlay: creas la clase personalizada toma esa polilínea". Debo hacerlo: [[THE-CUSTOM-CLASS alloc] initWithOverlay: THE-MKPOLYLINE-OVERLAY] – spiralstairs

Respuesta

1

lectura de la documentación, parece que se puede crear una instancia de MKOverlayPathView y asigne un objeto arbitrario CGPathRef a su propiedad path. Esta ruta puede contener tanto líneas rectas como arcos.

No sé (y la documentación no menciona) en qué formato deberían ser las coordenadas de la ruta (MKMapPoint o CLLocationCoordinate2D) pero probablemente pueda averiguarlo experimentando un poco.

+0

Gracias Ole Begemann. – Shiny

+0

Tiene que convertir las coordenadas en puntos respecto a la vista, MapView tiene un método convetCoordinatestoPoints y, a la inversa, Eso puede ayudar a construir el CGPathRef – iDroid

1

Ya se ha respondido a sí mismo en su comentario, pero me gustaría señalar a todos en el excelente proyecto AIMapViewWrapper en GitHub que incluye sample code para trazar una ruta de arco sobre un conjunto de coordenadas. En ese proyecto se está utilizando para dibujar el camino que toma un avión, incluido un camino de sombra debajo de él (y otras cosas como animar un avión a lo largo de ese camino). Debería ser útil para cualquier persona que apuñale esto.

Cuestiones relacionadas