Estoy escribiendo una aplicación que necesita para dibujar una «ruta» compuesta de un montón de puntos GPS (largo+lat). Los puntos están muy juntas y no siguen caminos, simplemente dibujando una línea entre cada punto es ideal.

La implementación actual que tengo es muy lento ya que estoy en bucle encima de todas las coordenadas GPS y la creación de un nuevo Punto y overlayitem en una detallada de superposición. Esto toma alrededor de 20 segundos para que cargue todos estos puntos y atraerlos a la mapview. Hay una manera en la que puedo construir una serie de líneas o punto de las coordenadas GPS y dibujar en el mapview?

Ejemplo de implementación actual:

 for each set of long+lats //removed to simplify
    point= new GeoPoint(latitude,longitude);
    overlayitem = new OverlayItem(point,"","");
    itemizedOverlay.addOverlay(overlayitem);
 mapOverlays.add(itemizedOverlay);
 mMapController.setCenter(point);

Gracias de antemano, espero que me he explicado suficientemente bien.

2 Comentarios

  1. 3

    Comprobar mi respuesta con el código que se muestra aquí:

    Cómo dibujar una ruta en un mapa utilizando el archivo kml?

    Este ejemplo se analiza un archivo kml archivos xml (formato proporcionado por Google Maps o Google Earth para el cálculo de la ruta) y dibuja el geo puntos en el mapa. Si usted ya tiene una lista de puntos geo, basta con mirar la drawPath() método; y ajustar la forma en que pasar el geo coords parámetros (I encapsulado en un sencillo bean que he nombrado NavigationDataSet).

    • Gracias me tomó algo de modificar, pero me las arreglé para conseguir que funcione, gracias.
  2. 3

    No es del todo claro para mí lo que estás haciendo, porque no estoy seguro de cómo itemizedOverlay está entre los puntos. Pero creo que el principal problema es que usted está usando un montón de OverlayItems cuando sería mucho más rápido a obviar la parte entera y anular el itemizedOverlay del draw() método. He hecho esto antes y funciona muy bien para el dibujo de línea. El basic pseudocódigo es:

    create List of GeoPoints
    add List to ItemizedOverlay
    add a dummy marker to ItemizedOverlay (so that it knows to call `draw()`)
    in ItemizedOverlay.draw(), use mapView.getProjection() to map the array of GeoPoints to x,y coords
    use Canvas.drawLines() to draw a line between all your points

    Ya que la velocidad es una preocupación, asegúrese de crear la Pintura de objetos en el ItemizedOverlay del constructor; que pueden ser reutilizados tanto como usted desea.

    También como una nota del lado, parece que usted está usando addOverlay() como se ha demostrado en Hola, MapView demo. El único problema con eso es que llaman a populate() cada vez que se agrega un elemento; si va a añadir un montón de puntos, es mejor añadir un montón de superposiciones a la vez, a continuación, llamar a populate() al final.

    • Por desgracia no puedo seleccionar tanto las respuestas como correctas, pero esta información fue útil para mí también, gracias 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here