Dibujar sobre 4K polylines en android google maps

Estoy desarrollando ahora una aplicación para dispositivos Android. La principal funcionalidad es dibujar polilíneas en el mapa para mostrar cuál es el tráfico en la ciudad en cada calle. Desafortunadamente, cuando dibujo alrededor de 3K polilíneas – el número se reduce de acuerdo con el tamaño de la pantalla y el nivel de zoom – mi mapa se vuelve increíblemente lento … No mencionar el tiempo de dibujo de todas las líneas.

Tal vez usted sabe de manera más eficiente para marcar las calles o dibujar líneas en un mapa?

También estaba pensando en cambiar a OSM, pero nunca lo usé y no sé lo eficiente que es.

Puedo depurar la aplicación en Samsung Galaxy Note 10.1 y App utiliza Map API v2

Mi código para dibujar polilíneas:

Polyline line; List<Float> coordinatesStart; List<Float> coordinatesEnd; LatLng start; LatLng end; List<List<Float>> coordinates; int polylinesNumber = 0; for(Features ftr : features){ coordinates = ftr.geometry.coordinates; for(int i = 0; i<coordinates.size()-1; i++){ coordinatesStart = coordinates.get(i); coordinatesEnd = coordinates.get(i+1); start = new LatLng(coordinatesStart.get(1), coordinatesStart.get(0)); end = new LatLng(coordinatesEnd.get(1), coordinatesEnd.get(0)); line = map.addPolyline(new PolylineOptions() .add(start, end) .width(3) .color(0x7F0000FF)); //semi-transparent blue polylinesNumber++; } } 

¡Apreciaría cualquier ayuda!

4 Solutions collect form web for “Dibujar sobre 4K polylines en android google maps”

¿Comprueba si la polilínea que dibuja es visible incluso para el usuario en la pantalla? Si no, esa sería mi primera idea. Esta pregunta podría ser de ayuda para eso.

Quiero escuchar esto porque no he encontrado esta respuesta completa. Si aleja el zoom, seguirá teniendo un montón de polilíneas individuales en la pantalla y el hilo de la interfaz de usuario se interrumpirá. TileProvider este problema usando un TileProvider personalizado y una proyección de mercator esférico de mis puntos LatLng a píxeles de pantalla. La idea surgió de la utilidad map-utils-library , que tiene la mayoría de las herramientas necesarias para escribir un lienzo en un mosaico (y muchas otras delicadezas también).

He escrito un ejemplo de ComplexTileOverlays de un proyecto en el que estaba trabajando. Esto incluye formas de cambiar el grosor de alfa y de línea en CustomTileProvider .

En primer lugar cargar mi base de datos personalizada de polilíneas en la memoria con una pantalla de presentación (para este ejemplo, es una base de datos abierta de instalaciones de bicicletas en la isla de Montreal). Desde allí, dibujo cada proyección de línea sobre un lienzo de 256 x 256 píxeles que representa un mosaico. En general esta técnica es más rápida a pasos agigantados si tiene un montón de superposiciones gráficas para atar al mapa.

Gran optimización aquí:

Su error principal es que utiliza la new PolyLineOptions instancia de new PolyLineOptions para cada línea que dibuja en los mapas. Esto es hacer el dibujo terriblemente lento.

La solución sería:

Utilice sólo una instancia de opciones de polilínea y utilice sólo la función .add(LatLng) dentro de los bucles.

  //MAGIC #1 here //You make only ONE instance of polylineOptions. //Setting width and color, points for the segments added later inside the loops. PolylineOptions myPolylineOptionsInstance = new PolylineOptions() .width(3) .color(0x7F0000FF); for (Features ftr : features) { coordinates = ftr.geometry.coordinates; for (int i = 0; i < coordinates.size(); i++) { coordinatesStart = coordinates.get(i); start = new LatLng(coordinatesStart.get(1), coordinatesStart.get(0)); //MAGIC #2 here //Adding the actual point to the polyline instance. myPolylineOptionsInstance.add(start); polylinesNumber++; } } //MAGIC #3 here //Drawing, simply only once. line = map.addPolyline(myPolylineOptionsInstance); 

Atención:

Si desea tener diferentes colores para diferentes segmentos / secciones de línea, tendrá que utilizar múltiples opciones de polilínea, ya que la opción de polilínea sólo podría tener un color. Pero el método sería el mismo: Use como pocos polylineOptions como usted puede.

  • FindViewById vs referencia local en la actividad
  • Android Studio generado APK se bloquea al ejecutar la aplicación en el mismo teléfono funciona bien. ¿Qué está mal?
  • El estudio de Android toma demasiada memoria
  • Código postal / código postal de android lugar objeto
  • Manejo de mapas de bits grandes
  • Vista web de Android lenta
  • ¿Por qué WebView es mucho más rápido que un TextView?
  • Rendimiento en Android Juego
  • Hacer que el emulador de Android funcione más rápido
  • ¿La pantalla de bienvenida de Android es blanca al principio?
  • Mi aplicación tarda tanto en lanzar la pantalla Primera actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.