SpatialKey genera algunos mapas de calor realmente atractivos, y estamos estudiando qué implica hacer esto para que un proyecto interno pueda visualizar grandes cantidades de puntos. Estoy buscando comentarios sobre algunas ideas sobre dónde empezar (y es solo un problema realmente interesante).La generación de mapas de densidad/calor como SpatialKey
SpatialKey heatmap http://img697.imageshack.us/img697/7964/resolutiondays508x17550.jpg
Sabemos que están usando Flash, y de lo que podemos decir, los mapas de calor son interactivos en lugar de ser procesada desde un servidor de baldosas. Nuestra primera conjetura sobre cómo se implementa esto es que el servidor proporciona a su cliente Flash una cuadrícula, cada celda tiene un conteo calculado por el servidor. El cliente Flash luego hace una interpolación basada en los valores de la celda en la grilla para hacer la salida bonita que ve arriba.
En este momento, solo me interesa saber cómo podrían generar la red de forma eficiente desde el servidor (si nuestra suposición sobre su implementación es incluso correcta). Parece que implicaría:
- Realizar una consulta para lo que está actualmente en el mapa los límites
- Realización de una subconsulta agregación para cada celda dentro de esos límites (haciendo un recuento, suma o la media, como en el ejemplo anterior) .
Tira haciendo esto en varios niveles de zoom con una buena resolución de cuadrícula y parece que necesitarías un índice espacial personalizado para hacerlo eficiente.
¿Alguno de los interesados en explicar una ruta alternativa? Si es importante, estamos acostumbrados a almacenar nuestros datos en PostgreSQL con PostGIS para el índice espacial, pero estoy dispuesto a intentar cualquier cosa.
me he dado cuenta de que puede haber malinterpretado la pregunta. La pregunta aparece dirigida a cómo obtener el conjunto de datos que contiene la latitud, longitud y "altura", en lugar de cómo representarlo. Una vez más, sin saber cómo SpatialKey está haciendo esto, creo que al menos parcialmente está bien. En vez de ejecutar subconsultas para cada celda, lo que podría abrumar rápidamente a la base de datos (una cuadrícula de 10x10 requeriría 100 subconsultas), se puede hacer lo siguiente: - Hacer que el lado del cliente pasa la anchura y la altura de la superficie de hacer junto con los límites en longitud y latitud –
- Calcula la resolución de la longitud y la latitud haciendo un mapeo de rango entre longitud y latitud y ancho y alto. Esto le indica el ancho y alto efectivo del contenedor para cada celda desde una perspectiva de latitud y longitud. - Consultar todos los puntos en los límites de longitud y latitud - Iterar a través de cada punto y redondear a la longitud y latitud más cercanas - Almacenar resultado de una búsqueda de tabla hash donde la clave es la longitud binned y latitud y el valor de ser el recuento –
- salida el resultado como un conjunto de datos con tres columnas: longitud, latitud y contar (por ejemplo: altura) el cliente puede entonces fácilmente renderizar este conjunto de datos usando una biblioteca GIS en el front-end. O bien, puede preprogramar los puntos y enviarlos al front-end utilizando coordenadas X, Y de píxeles. [Nota: Me acabo de dar cuenta de que mi uso del término "altura" aquí puede ser confuso. Esto se debe a un mapa de densidad es esencialmente un mapa tolopogical de color con el color que representa la altura de cada punto] –