Los COG son archivos Geotiff optimizados para su uso en aplicaciones web.
Podemos sustituir Geoserver gracias a estos archivos. Geoserver brilla como fuente que homogeiniza datos y nos los sirve con algún protocolo, pero cuando tenemos el control total nosotros, podemos crear COG y servirlos mediante un proxy como Caddy o Nginx, y de forma sencilla y sobretodo con un muy buen rendimiento tenemos un servidor de mapas con muy poca infraestructura.
Podemos usar la librería rio cogeo, basada en rasterio, para crearlos. Tanto con código en Python como usando línea de comandos. Hay obviamente más opciones, a continuación aparecen solamente aquellas que uso.
rio cogeo create \
--nodata 0 \
--add-mask \
-w -p jpeg \
--threads 8 \
file_input.tif file_input.cog.tif
# Función extraida de la propia documentación de la librería
from rio_cogeo.cogeo import cog_translate
from rio_cogeo.profiles import cog_profiles
def translate(
src,
dst_path,
profile="jpeg",
web_optimized=True,
profile_options={},
**options,
):
output_profile = cog_profiles.get(profile)
output_profile.update(dict(BIGTIFF="IF_SAFER"))
output_profile.update(profile_options)
config = dict(
GDAL_NUM_THREADS="ALL_CPUS",
GDAL_TIFF_INTERNAL_MASK=True,
GDAL_TIFF_OVR_BLOCKSIZE="128",
)
cog_translate(
src,
dst_path,
output_profile,
config=config,
in_memory=False,
quiet=True,
web_optimized=web_optimized,
**options,
)
Por defecto, Leaflet no puede mostrar COGs. Una forma sencilla de servirlos de forma que sean consumibles por él es usar titiler, o rio-tiler directamente.
rio tiler y titiler (que se basa en aquél) pueden trabajar con imágenes multibanda. Pero si ponemos colormap solo podemos usar imágenes con una sola banda.