Dibujando el mundo
11feb/100

Renderizar Mapnik usando metatiles

Tal como se documenta en OpenStreetMap podemos utilizar mapnik como motor gráfico para renderizar casillas a partir de información geográfica proveniente de las fuentes de datos de la misma comunidad o a partir de muchos de los formatos de archivos más difundidos en el entorno del GIS.

Terrassa y sabadell a partir del estilo por defecto de OSM

Si seguimos el manual al pie de la letra terminaremos renderizando imágenes de un area deseada mediante el script de python generate_image.py que encontraremos en las utilidades de OpenStreetMap para mapnik o generando colecciones de casillas usando el scrip del mismo paquete generate_tiles.py. El sistema es enormemente flexible y versatil, de modo que el tipo y aspecto de la cartografía que resultará ofrece un abanico enorme de posibilidades.

Terrassa y Sabadell con curvas de nivel y parte de un raster

Tal como se especifica en las mismas fuentes comentadas, el rendimiento en el procesado y la cantidad de cartografía a generar depende en gran medida de las características de nuestro equipo informático, ya que generar las casillas con generate_tiles.py puede ser muy tedioso si el área a cubrir es amplia. Este procesará cada una de las casillas individualmente, y por otro lado, la cantidad de casillas que pude suponer un area relativamente pequeña a un zoom cercano puede ser muy elevada.

Actualmente hemos realizado ciertas pruebas para generar casillas en nuestro servidor y disponer de cartografía personalizada, y uno de los impedimentos es precisamente el tiempo de proceso que puede requerir trabajar con grandes volúmenes.

Una posible solución es evitar que se renderize cada casilla por separado, ya que esto requiere para cada casilla un conjunto de consultas y búsqueda de datos geográficos en los orígenes de datos que se repetirá de nuevo para cada petición de casilla. Si observamos que el funcionamiento del script generate_image.py; podemos llegar a la conclusión de que debería ser más rápido renderizar una imagen que llamaremos metatile que cubra una superficie de varias casillas para luego fragmentarla y almacenar estos archivos individualmente. Esto implica importantes cambios en el archivo generate_tiles.py para que cumpla nuestro propósito.

Como comentaba, después de algunas pruebas hemos obtenido los primeros resultados, consiguiendo por ahora una solución que detallaré en otro post.