Una de las características más interesantes de Geoserver es su capacidad para administrar un servicio de imágenes en cache. Veremos en este artículo cómo aprovechar completamente esta función.
Un pequeño recordatorio del concepto de tesela
En la siguiente imagen, verá la representación de dos modos de funcionamiento de un servidor de mapas.
A la izquierda tienes la operación de un servidor de mapas clásico:
• una aplicación cliente genera una consulta para construir un mapa
• el servidor recibe la solicitud
•el servidor extrae los datos necesarios para producir el mapa a partir de una base de datos que contiene las diferentes capas geográficas
• el resultado de esta extracción se formatea para constituir el mapa solicitado
• el mapata es enviado a la aplicación cliente para su visualización
A petición de cada cliente, el servidor debe consultar la base de datos y formatear los datos extraídos.
La imagen de la derecha muestra el funcionamiento de un servidor con la función «teselado» activada:
• una aplicación cliente genera una consulta para construir un mapa
• el servidor recibe la solicitud
• según el marco del mapa solicitado, el servidor selecciona imágenes precalculadas, en la memoria cache del servidor, que corresponden al marco y al nivel de zoom solicitado
• las imágenes se transmiten a la aplicación cliente para su visualización
Todo el trabajo de extracción y formateo se ha realizado de antemano y solo una vez. En esta segunda configuración, un simple cálculo es suficiente para determinar qué imágenes se deben enviar a la aplicación cliente. Esto representa un ahorro de tiempo y recursos necesarios realmente importantes.
Geoserver produce el mapa de acuerdo auna simbología, y luego corta esta imagen en teselas del mismo tamaño. Este trabajo se hace de una vez por todas.
Cada tesela representa datos formateados y se puede suministrar muy rápidamente. Por otro lado, estamos limitados a visualizar simplemente las teselas ya que no se puede acceder a los datos subyacentes ni modificar su formateado.
Un problema de este sistema es que, si hacemos zoom en esta tesela, rápidamente alcanzaremos el nivel de pixelación. Para resolver este problema, crearemos varios mapas, a diferentes niveles de acercamiento. Cada mapa se dividirá en teselas de igual dimension. Al recibir una solicitud, calcularemos el nivel de zoom correspondiente y serviremos las teselas correspondientes en este nivel.
Por lo general, procedemos en pasos de 4 teselas. La capa más detallada se divide en teselas, generalmente de tamaño de 256 x 256 píxeles. Calcularemos una capa superior correspondiente a 2×2 teselas(a partir de 4 teselas de 256 x 256 píxeles calculamos una sola tesela de 256 x 256 píxeles). Y así sucesivamente hasta el nivel en el que solo encontramos una tesela.
Esta serie de capas se llama pirámide.
Teselas raster y teselas vectoriales
Hasta ahora hemos hablado de un servidor de mapas de tipo ráster. Incluso si los datos en la base de datos son datos vectoriales (calles, edificios, parques, …), la representación que se aplica a estas capas vectoriales es para producir una imagen ráster, que será el resultado de la consulta.
Este tipo de servicio se llama WMS.
En los últimos años, un nuevo tipo de servicio,llamado WMTS, proporciona datos en forma de teselas . En Geoserver, este servicio se implementa para proporcionar teselas de datos vectoriales.
El principio es el mismo que para las teselas ráster:
Dividimos el espacio en cuadrados y extraemos los datos vectoriales (entidades) correspondientes a cada panel:
Al recibir una solicitud, el servidor procede de la misma manera que cuando se solicitan teselas raster: se determina el nivel de zoom apropiado, luego se envían los datos preextraídos a la aplicación cliente.
Generación de teselas
El procedimiento para generar teselas es el mismo, ya sea que se trate de teselas raster o vectoriales.
El primer paso es extraer los datos correspondientes a la consulta de la base de datos.
La mayoría de las veces, estos datos son datos de tipo vector (punto, línea, polígono).
Los datos son los datos correspondientes a la totalidad del espacio posible, no al espacio ocuopado por una tesela.
El segundo paso corresponde a lo que se llama «generalización».
El proceso intenta conservar solamente el nivel de detalle necesario al grado de zoom solicitado, borrando los puntos superfluos.
El tercer paso es la generación de un archivo para traducir el sistema de grillas utilizado para el mosaico y un sistema de coordenadas de referencia. Geoserver usa grillas (gridsets) y subgrillas (gridsubsets). GeoWebCache no conoce ningún sistema de referencia. Cuando GeoWebCache envía una solicitud al servicio WMS, utiliza la información gridset y gridsubset para convertir su índice interno de teselas en una consulta espacial que el WMS entenderá.
El cuarto paso es un segundo tipo de generalización, pero en lugar de simplificar las geometrías reduciendo el número de puntos que las componen, consiste en eliminar las entidades que son o demasiado pequeñas o redundantes.El penúltimo paso es el recorte (clip) en teselas. Todavía no hemos aplicado la simbología a las entidades. Si extraemos exactamente el área solicitada para cada mosaico, al aplicar una simbología corremos el riesgo de tener artefactos en la unión de las teselas, como se muestra en esta imagen.Geoserver usa una técnica que devuelve un área un poco más grande que la solicitada para la tesela. Esto evita artefactos en los bordes.
Finalmente, encontramos el formateo de las entidades con la simbología definida en un archivo SLD:
Este archivo especifica qué entidades se deben tener en cuenta, en qué rango de escala deberán aparecer en las teselas y el tipo de símbolo que se utiliza para representarlos.
Teselas ráster y teselas vectoriales.
Tenemos, en los estándares OGC, tres tipos de servicios
• WMS – Servicio de suministro de mapas raster
• WMTS – servicio de suministro de teselas
• WFS – Servicio de suministro de datos vectoriales
La teselas de tipo raster o vectorial son proporcionadas por el mismo servicio, el WMTS.
Si ambos tipos de datos se proporcionan por medios similares, existen algunas diferencias.
Con respecto a las teselas raster, las teselas vectoriales son formateadas por el cliente y no por el servidor. En una aplicación OpenLayers, por ejemplo, no podrás hacer otra cosa que visualizar las teselas con su simbología de orígen. En cambio, si la aplicación solicita teselas de tipo vector, podrás definir libremente la simbología a aplicar par su visualización en esta aplicación.
Un solo teselado podrá ser utilizado para generar múltiples mapas diferentes en el lado del cliente. A esto se debe agregar que la representación de los vectores es mucho mas fina, en comparación con las teselas raster, para las pantallas de alta resolución.
Dentro de las desventajas, debe tenerse en cuenta que las teselas raster son más fáciles de usar que las teselas vectoriales. Se necesitan más conocimientos técnicos para trabajar con teselas vectoriales.
No es difícil concluir que es más interesante utilizar el servicio de teselas de vectores en lugar del servicio de datos vectoriales tradicional WFS.
Si bien es cierto que los dos retornan datos vectoriales con sus atributos sin simbología, tenga en cuenta que el servicio WFS suministra los datos subyacentes sin ningún cambio, mientras que el servicio WMTS suministra los datos subyacentes modificados de manera a estar listos para ser visualizados.
En el primer caso se tiene acceso a todos los atributos de las entidades, mientras que en el segundosolo se tiene acceso los atributos definidos en el archivo SLD utilizado para el teselado.
En el siguiente artículo veremos cómo configurar el servicio de teselado raster y vector en Geoserver.