GeoWebCache: acelera la entrega de imágenes de mapa

GeoWebCache es una aplicación web de código abierto, basada en Java, que aumenta el rendimiento de un WMS (o WMS-C, WMTS, TMS, Google Maps KML, Virtual Earth) mediante un pre-dibujo y almacenamiento (cacheado) de las teselas de mapa para dar una respuesta más rápida a las solicitudes de los clientes.

Aunque es un producto independiente, lo habitual es utilizarlo de forma conjunta con  GeoServer.

GeoWebCache acelera y optimiza la entrega de las imágenes de mapa (generalmente se trata de la cartografía servida por GeoServer)

¿Cuando usar GeoWebache?

Si disponemos de cartografía estática, que no está sujeta a cambios, podemos generar las teselas de mapa. Las aplicaciones webmapping realizan un renderizado de datos de un WMS cada vez que se realiza una petición. Esta operación puede resultar innecesaria y aumentar los tiempos de respuesta. GeoWebCache optimima esta experiencia guardando las imágenes de mapa (las cachea), de hecho actúa como un proxy entre el cliente (OpenLayers o cualquier otro) y el servidor (GeoServer o un servidor compatible con el estándar WMS del OGC).

GeoWebCache se puede utilizar incluso en el caso de que nuestros mapas no sean completamente estáticos, ya que permite la eliminación selectiva de teselas, por lo que los datos siguen siendo actuales. En este sentido GeoWebCache actúa como un acelerador  para la representación del mapa.

¿Cómo funciona?

Cuando el cliente (por ejemplo OpenLayers) hace una solicitud, GeoWebCache intercepta esta petición y realiza las comprobaciones necesarias para ver si ya tiene la imagen correspondiente, entonces:

  1. Si GeoWebCache tiene la imagen, se la envía al cliente de inmediato.
  2. Si no la tiene, la solicitud se envía al servidor WMS apropiado (por ejemplo, GeoServer). Cuando la respuesta WMS vuelve, GeoWebCache guarda una copia (la cachea) y después la envía al cliente.
flujo de trabajo GeoWebCache
Flujo de trabajo de GeoWebCache

Por lo tanto, una vez que las teselas son generadas y almacenadas, la velocidad de renderizado del mapa aumenta, con lo que la experiencia de usuario se ve mejorada.

Ejemplo de pregeneración de teselas con GeoWebCache

Accedemos a GeoWebCache a través de la url http://localhost:8080/geowebcache/home o http://localhost:8080/geoserver/gwc si tenemos instalado también GeoServer.

En la página de bienvenida accedemos al listado de capas:

listar capas

A continuación aparecerán listadas todas las capas que tenemos cargadas en GeoServer, pinchamos en una y hacemos clic sobre Seed this layer:

GeoWebCache Seed this layer

Crearemos una tarea nueva, que incluye los niveles de la escala, los límites de las teselas, y el formato de la imagen para el cacheado de la capa en cuestión:

GeoWebCache Create a new task

  • Number of tasks to use: Esto se refiere a la gestión de procesador para la tarea. Se recomienda establecer este valor en dos veces el número de núcleos de tu equipo. Si trabajas a nivel local, dejaremos el valor en 2.
  • Type of operation:
    • Reseed: genera todos las teselas.
    • Seeds: llena los huecos donde no existen teselas.
    • Truncate: vacía la memoria caché eliminando todas las teselas.
  • Grid Set: elegimos la proyección en la que se renderizarán las teselas (por defecto solo podemos seleccionar EPSG:4326 o EPSG:900913)
  • Format: Este valor determina qué formato de salida de imagen usará el servicio de mapas cuando se creen las teselas. Esto determina:
    • El tamaño en el disco de las teselas.
    • La calidad de imagen.
    • La capacidad de hacer el fondo de las teselas transparente.
  • Zoom start: El nivel de zoom superior, en general suele ser una buena idea crear las teselas desde el nivel de zoom más alto hacia abajo.
  • Zoom stop: El nivel de zoom más bajo. Cuanto más alto, más tiempo de proceso.

Explicaremos más adelante cómo averiguar a qué niveles de zoom se corresponde una determinada escala.

  • Bounding box: se puede elegir pre-crear solo una porción del área total. Si queremos generar el cache de toda la extensión, dejamos estos campos en blanco.

El botón Submit inicia el proceso de creación de teselas. El equipo irá lento durante un rato mientras se generan las teselas y se guardan en el directorio de caché. Las teselas se almacenan en el directorio:

…\geoserver\gwc\nombredelacapa\proyección_niveldezoom\tileset

teselas GeoWebCache

Otra manera de acceder a las opciones de cacheado de imágenes es desde GeoServer. Accede al panel de la izquierda al grupo Tile Caching → Caching Layers. A continuación seleccionamos la capa en cuestión y pinchamos en la opción Seed/Truncate. También podemos eliminar todos las teselas, haciendo clic en Empty.

¿Cómo saber a qué niveles de zoom debemos generar las teselas?

GeoWebCache nos permite elegir valores de zoom entre 0 y 30, sin embargo el visor de OpenLayers solo muestra por defecto 21 posiciones de zoom.

Si queremos guardar en cache solamente una capa en unas determinadas escalas, ¿cómo podemos saber a que niveles de zoom corresponden cada escala?

El detalle de los valores que toma por defecto GeoWebCache los podemos ver en GeoServer: En el panel izquierda accedemos a Tile Caching → Caching Defaults, De este modo podemos ver cómo para la proyección 4326 tenemos 22 niveles de zoom y para la proyección 900913 tenemos 31.

caching defaults

En el apartado Tile Caching → Gridsets podemos acceder a las características particulares de cada proyección, por ejemplo si accedemos al EPSG:900913, en la parte inferior (en Tile Matrix Set) vemos las escalas correspondientes a cada nivel de zoom. En esta sección podemos definir que la creación de teselas (la rejilla completa) se base un nivel de resolución o en un denominador de escala:

GeoWebCache_gridsets

Como vemos en la imagen anterior, el nivel 0 se corresponde con la escala 1: 559.082.263, el nivel 10 corresponde con la escala 1:545.978. No lo vemos en la imagen pero el nivel 19 corresponde a la escala 1: 1066 y para el nivel de zoom máximo, el 30, la escala es 1: 0,5.

En la documentación de GeoServer se muestra cómo crear un nuevo gridset, ya que los gridset preconfigurados no se pueden modificar:

https://docs.geoserver.org/latest/en/user/geowebcache/webadmin/gridsets.html

Si quieres aprender más sobre GeoWebCache y GeoServer y crear tu aplicación web de mapas, inscríbete en nuestro curso online desarrollo de aplicaciones webmapping.