Pregunta

Clave espacial genera algunos mapas de calor muy atractivos, y estamos investigando lo que implica hacer esto para que un proyecto interno visualice grandes cantidades de puntos.Estoy buscando comentarios sobre algunas ideas sobre por dónde empezar (y es un problema realmente interesante).

Mapa de calor de SpatialKey http://img697.imageshack.us/img697/7964/solvingdays508x17550.jpg

Sabemos que están usando Flash y, por lo que podemos ver, los mapas de calor son interactivos en lugar de renderizarse desde un servidor de mosaicos.Nuestra primera suposición de cómo se implementa esto es que el servidor proporciona a su cliente Flash una cuadrícula: cada celda tiene un recuento calculado por el servidor.Luego, el cliente Flash realiza una interpolación basada en los valores de las celdas en la cuadrícula para obtener el bonito resultado que ve arriba.

En esta etapa, solo estoy interesado en cómo podrían generar la red de manera eficiente en el lado del servidor (si nuestra suposición sobre su implementación es correcta).Parece que implicaría:

  1. Realizar una consulta sobre lo que hay actualmente dentro de los límites del mapa
  2. Realizar una subconsulta de agregación para cada celda dentro de esos límites (haciendo un recuento, suma o promedio como en el ejemplo anterior).

Si hace esto en múltiples niveles de zoom con una resolución de cuadrícula sensata, parece que necesitaría un índice espacial personalizado para que esto sea eficiente.

¿Alguien quiere explicar una ruta alternativa?Si es importante, aquí estamos acostumbrados a almacenar nuestros datos en PostgreSQL con PostGIS para el índice espacial, pero estoy abierto a probar cualquier cosa.

¿Fue útil?

Solución

Como una simple suposición, me imagino que han implementado una biblioteca SIG en Flash en el lado del cliente y la están usando para proyectar coordenadas de latitud y longitud en un espacio de píxeles.Luego se agregan por píxel para determinar la "altura" de cada píxel y lo renderizan como si fuera un círculo, pero usando un relleno degradado con transparencia, con los colores inicial y final del relleno degradado determinados por la altura del píxel.Varios círculos superpuestos uno encima del otro crearán píxeles más brillantes.

Una alternativa podría ser hacer esto en una escala de grises y luego asignar el valor de brillo a una escala de colores.Eso podría ser lo más eficiente.

Vendemos los mapas de calor de mapas de árbol más tradicionales para su uso integrado en aplicaciones de análisis visual (por ejemplo:SDK de mapas de calor), y ahora tienen mapas de calor geográficos que colorean áreas.Leemos mapas estándar de ESRI Shapefile y hacemos toda la proyección y renderizado en el lado del cliente (en Java, no en Flash, pero con el mismo concepto).Creo que SpatialKey está haciendo lo mismo, ya que admiten renderizado de áreas llenas, lo que realmente no se puede hacer si estás usando un servidor de mosaicos como Google Maps.

Todavía no estamos haciendo mapas de calor de densidad como este, pero hemos realizado un par de pruebas utilizando imágenes estáticas como fondo.Si desea obtener más información, hágamelo saber y puedo preguntarle a mi desarrollador cómo lo hicimos.Sé que actualmente estamos desarrollando más funciones basadas en puntos, aunque todavía no sé dónde se encuentran los mapas de calor de densidad en el cronograma.

SpatialKey acaba de escribir una buena publicación sobre las diferencias entre mapas de calor llenos de áreas (es decir:mapas temáticos) y mapas de calor de densidad.Puedes consultarlo en http://blog.spatialkey.com/2010/02/comparing-thematic-maps-with-density-heatmaps/.

Si descubre una buena manera de hacer mapas de calor de densidad, me interesaría saber cómo lo hizo, ya que sería una valiosa adición a nuestro SDK de análisis visual.Toda la suerte.

Otros consejos

MapReduce para su mapa totales agregados reales, y algo con Indexación Geoespacial para la base de datos - para alimentar a estos trabajos de MapReduce. Estoy buscando en la implementación de este mismo enfoque exacto, pero para las interfaces en lugar de mapas :) MongoDB parece ser un buen ajuste en el momento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top