Cómo crear un mapa de calor – heatmap con GeoServer

Un heatmap (o mapa de calor) se puede representar en GeoServer y servir como servicio WMS mediante una transformación de representación vector-to-raster.

Un heatmap muestra un conjunto de datos como una superficie de mapa de calor (o «superficie de densidad»). La superficie del heatmap se genera dinámicamente, por lo que se puede utilizar para visualizar datos dinámicos. Puede ser aplicado a conjuntos de datos muy grandes con bastante buen rendimiento.

heatmap

Las representaciones de transformaciones en GeoServer permiten la creación de visualizaciones sofisticadas y dinámicas de datos geoespaciales. Se definen con un estilo SLD, y permiten la transformación de los datos de entrada en un formato más eficaz para la visualización, en este caso un ráster.

Al igual que con todas las transformaciones de representación, la transformación se invoca mediante la adición del elemento <Transformation> a un <FeatureTypeStyle> en un estilo SLD. El SLD puede entonces  aplicarse a cualquier capa que está respaldada por un dataset adecuado (featuretype). La transformación se especifica con el elemento <ogc:Function name=»gs:Heatmap»> , con argumentos que suministran los parámetros de transformación.

Los parámetros de transformación son los siguientes:

Nombre ¿Requerido? Descripción
data Si FeatureCollection de entrada que contiene los elementos del mapa.
radiusPixels Si Radio de densidad del kernel (en pixels).
weightAttr No Nombre del atributo con el peso (por defecto 1)
pixelsPerCell No Resolución de la malla. Los valores elevados mejoran el rendimiento, pero pueden degradar el aspecto si son demasiado elevados. (Por defecto 1)
outputBBOX Si Caja delimitadora georreferenciada de salida.
outputWidth Si Ancho de la imagen de salida
outputHeight Si Altura de la imagen de salida.

Datos de entrada

La transformación de representación de un mapa de calor se aplica a un dataset de entrada que contiene los elementos vectoriales. La geometría puede ser de cualquier tipo. Las geometrías de puntos se utilizan directamente, mientras que los tipos de geometría no puntuales se convierten en puntos utilizando el centroide. El dataset se proporciona en el parámetro data.

Opcionalmente, los elementos pueden ser ponderados suministrando el nombre del atributo con un peso, usando para ello parámetro weightAttr. El valor de este atributo se utiliza para ponderar la influencia de cada elemento puntual.

Datos de salida

El resultado de la transformación es un ráster de una sola banda. Cada píxel tiene un valor de punto flotante en el rango [0 .. 1] la midiendo la densidad del píxel en relación con el resto de la superficie. Al ráster puede proporcionársele un estilo con un <RasterSymbolizer>.

Ejemplo

El mapa de calor de la imagen anterior se produce por el siguiente SLD:

SLD heatmap

El mapa también muestra los puntos de entrada originales estilizados con otro SLD, así como un mapa base. Puedes adaptar este SLD a tus datos realizando pequeñas modificaciones ajustando los parámetros.

Una vez creado el nuevo estilo podemos aplicarlo en la publicación de nuestra capa puntual, en este caso se trata de las ciudades más importantes del mundo. La leyenda que se aplica a la capa sería la siguiente:

estilo_heatmap

Las transformaciones de representación se implementan utilizando el mismo mecanismo que los procesos WPS. Así pues, pueden ser ejecutadas mediante el protocolo WPS si es necesario. A la inversa, cualquier proceso WPS puede ser ejecutado como una transformación, siempre que la entrada y la salida sean apropiados para su uso dentro de un SLD.

Más info:

http://suite.opengeo.org/opengeo-docs/cartography/rt/heatmap.html

 Si te ha gustado esta entrada deja un comentario o compártela!

Let’s connect!

Date de alta en nuestra newsletter
y recibe este ebook gratuito

Y una vez al mes recibirás las últimas novedades del sector GIS y de nuestros cursos

1 comentario en «Cómo crear un mapa de calor – heatmap con GeoServer»

  1. hola Aurelio…

    una consulta, tengo un heatmap hecho en Geoserver y quiero agregarlo como capa a un mapa en leaflet.

    lo intente agregar como una capa WMS, pero no me resulto, tienen algún indicio de como hacerlo?
    de antemanos muchas gracias.

Los comentarios están cerrados.