Pregunta

Tengo un problema similar a esta publicación . Necesito mostrar hasta 1000 polígonos en un mapa de Google incrustado. Los polígonos están en una base de datos SQL, y puedo renderizar cada uno como un solo archivo KML sobre la marcha usando un HttpHandler personalizado (en ASP.NET), como este http://alpha.foresttransparency.org/concession.1.kml .

Incluso en mi máquina de desarrollo (muy rápida), lleva un tiempo cargar incluso un par de docenas de formas. Entonces, dos preguntas, realmente:

  1. ¿Cuál sería una buena estrategia para representarlos como marcadores en lugar de superposiciones una vez que supere un cierto nivel de zoom?

  2. ¿Existe un algoritmo disponible públicamente para simplificar un polígono (reduciendo el número de puntos) para que no muestre más puntos de los que tienen sentido en cierto nivel de zoom?

¿Fue útil?

Solución

Para su segunda pregunta: necesita el Algoritmo de generalización Douglas-Peucker

Otros consejos

Para su primera pregunta, ¿podría calcular el área de un polígono en particular y relacionar cada nivel de zoom con un área mínima en particular, de modo que al acercar o alejar la imagen desaparece el polígono y aparecen marcadores dependiendo del nivel de zoom.

Para la segunda pregunta, usaría la sugerencia de Mark Bessey.

No sé mucho sobre KML, pero creo que la solución habitual a la pregunta # 2 consiste en iterar sobre los puntos y eliminar cualquier segmento de línea de un tamaño determinado. Esto causará algunos "desafortunados" efectos en algunos casos, pero es relativamente rápido y fácil de hacer.

Recomendaría 2 cosas: - Calcular y combinar polígonos que se tocan. Esto implica MUCHO procesamiento y matemática difícil, pero lo he hecho, así que sé que es posible. - Cree su propia superposición en lugar de usar KML en formato PNG, mientras las combina en la sugerencia anterior. Tendrás que crear MUCHOS PNG, pero el cliente es increíblemente rápido.

Buena suerte :)

Hace un momento necesitaba una solución a su pregunta n. ° 2 y después de ver algunos de los algoritmos de simplificación de línea disponibles, creé la mía.

El proceso es simple y parece funcionar bien, aunque puede ser un poco lento si no lo implementa correctamente:

P[0..nfont> es su conjunto de puntos  Deje que T[nfont> se defina como el triángulo formado por los puntos P [n-1], P [n], P [n + 1 ]  Max es el número de puntos a los que intenta reducir esta línea.

  1. Calcule el área de cada triángulo posible T [1..n-1] en el conjunto.
  2. Elija el triángulo T [i] con el área más pequeña
  3. Retire el punto P [i] para aplanar esencialmente el triángulo
  4. Recalcular el área de los triángulos afectados T [n-1], T [n + 1]
  5. Vaya al paso 2 si el número de puntos > Max
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top