GeoServer: Creación de una pirámide raster con transparencia

Note

Fecha Autores
3 Diciembre 2014

Excepto donde quede reflejado de otra manera, la presente documentación se halla bajo licencia : Creative Commons (Creative Commons - Attribution - Share Alike: http://creativecommons.org/licenses/by-sa/3.0/deed.es)

Contexto

Para este taller partimos de un conjunto de GeoTIFFs de tres bandas (RGB) sin overviews, sin tiles y sin valores no data.

Estos GeoTIFFs cubren solo parte de la extensión total, por lo que la pirámide deberá contener imágenes transparentes para aquellas zonas donde no haya imágenes raster.

Además, los propios GeoTIFFs utilizan el color blanco ((255,255,255) = #FFFFFF) para representar las zonas donde no hay cobertura.

Nuestro objetivo es publicar en GeoServer una pirámide que muestre nuestras imágenes raster acompañadas de transparencia allí donde no haya cobertura o la imagen sea blanca.

Preparación de las imágenes

En primer lugar debemos saber que la pirámide generará imágenes negras para aquellas zonas donde no haya cobertura. Por lo tanto, es necesario que en nuestras imágenes cambiemos el color que representa zonas sin cobertura de blanco a negro.

En caso de que dicho color sea uniforme, podemos utilizar GDAL (gdalwarp) para cambiarlo a negro:

$ for i in $(ls imagenes_originales/*.tif); do gdalwarp -srcnodata 255 -dstnodata 0 $i imagenes_procesadas/$(basename $i); done

Si el color no es uniforme este proceso no nos servirá y no nos quedará otra opción que editar las imágenes a mano (Photoshop, GIMP, ...).

Construcción de la pirámide

Para construir la pirámide utilizaremos también GDAL (gdal_retile):

$ gdal_retile.py -v -r bilinear -levels 8 -ps 2048 2048 -s_srs "EPSG:23030" -of GTiff -co "TILED=YES" -co "COMPRESS=DEFLATE" -targetDir piramide imagenes_procesadas/*.tif

Los parámetros más importantes que hemos utilizado en este caso son:

  • -levels 8: Número de niveles de la pirámide. Es importante crear un número suficiente de niveles de tal forma que al menos el nivel superior tenga una única imagen.
  • -co TILED=YES: Creación de tiles internos en el GeoTIFF.
  • -co COMPRESS=DEFLATE: Compresión de las imágenes. Es muy importante que la compresión no tenga pérdida, ya que de lo contrario los límites entre la ortofoto y el fondo negro (dentro de un mismo tile) quedarían difuminados, dando lugar a puntos de color negro cuando se aplique la transparencia con GeoServer.

Publicación en GeoServer

Una vez hemos creado nuestra pirámide, únicamente queda publicarla con GeoServer.

Para ello necesitamos una extensión adicional que se llama ImagePyramid y que se puede descargar de la página de GeoServer.

  • En la página “Almacenes de datos”, hacer clic en “Agregar nuevo almacén”.
  • Escoger ImagePyramid bajo Origenes de datos raster.
  • En el formulario, establecer el nombre y el espacio de trabajo y utilizar el directorio que contiene la pirámide (piramide, según los comandos mostrados más arriba) en URL (siempre con el prefijo file:).
  • Clicar en “Guardar”.

En función del tamaño de la pirámide, GeoServer puede tardar más o menos en añadir la pirámide, llegando a necesitar bastantes minutos para pirámides de varias decenas de GB.

Una vez se ha añadido el almacén de datos, clicar en Publicación para publicar.

Se presentará una página para rellenar los datos sobre la capa.

En este caso, únicamente deberemos establecer el valor para InputTransparentColor para decirle a GeoServer qué color debe tomar como transparente. En nuestro caso, ese color es el negro, por lo que deberemos poner el valor 000000.

  • Clicar en “Guardar”.

Es importante tener en cuenta que para que GeoServer nos devuelva las imágenes con transparencia, en la petición WMS debemos utilizar un formato de imagen que soporte la transparencia (FORMAT=image/png) y especificar de manera explícita que queremos la imagen con transparencia (TRANSPARENT=true)