Cómo crear superposiciones con gdal2tiles

Mano Marks, equipo de API de Google Geo
Septiembre de 2009

Objetivo

En este instructivo, se explican los aspectos básicos para crear una superposición de superposiciones, un conjunto de superposiciones de suelo que usan NetworkLinks basados en regiones, mediante las utilidades de código abierto de biblioteca de abstracción de datos geoespaciales.

Introducción

Los navegadores geográficos como Google Earth y Google Maps te proporcionan imágenes satelitales y mosaicos de mapas. Sin embargo, es posible que a veces quieras usar las tuyas. Las imágenes, o datos de trama, vienen de muchas formas y tienen muchos usos.

  • Ubicar tus propias imágenes satelitales o aéreas en un navegador geográfico
  • Ubicación de mapas históricos sobre imágenes existentes, como la capa Rumsey Maps en Google Earth
  • Importa datos de GIS en formato de trama
  • Colocar imágenes LIDAR o infrarrojas en el navegador geográfico

Sin embargo, uno de los problemas con los datos de trama de alta resolución es que se necesita mucha memoria para mostrarlos. Y si lo hace sobre la red, también tienen problemas con el ancho de banda. Para solucionar ese problema, debes crear tarjetas.

Al dividirlos, el mosaico divide tu archivo de imagen en muchas imágenes distintas que se cargan cuando aparecen. Se crea una imagen de baja resolución para la visualización mientras el usuario aleja la imagen. En la misma área, creas cuatro imágenes de mayor resolución para verlas más de cerca. Para cada área superpuesta por una imagen, se crean cuatro imágenes más de mayor resolución para acercarse más, etc. Esto se conoce como el método quadtree, y es la forma en que las imágenes se muestran en mosaicos para Google Earth y Google Maps. El proceso se explica con más detalle en el artículo de la guía para desarrolladores de KML sobre regiones.

Es posible hacerlo de forma manual con una aplicación de edición de gráficos, como PhotoShop o GIMP de Adobe, pero puede ser complejo, tedioso y propenso a errores. También hay una serie de aplicaciones buenas disponibles, principalmente para Windows, como SuperOverlay, Arc2Earth y MapCruncher, combinadas con CrunchUp2KML.

Si deseas automatizar el proceso o agregar funcionalidades a tu aplicación, GDAL te proporciona un amplio conjunto de herramientas para trabajar con datos de trama y vectoriales. En este artículo, se describen las opciones de la línea de comandos. Sin embargo, las bibliotecas también se pueden incorporar fácilmente en tus propias aplicaciones. Para este instructivo, usarás las utilidades gdalinfo, gdal_translate, gdalwarp y gdal2tiles. El resultado final es una súper superposición.

Pasos de la línea de comandos

Hay seis pasos para usar GDAL en la línea de comandos.

  1. Descargar GDAL para instalarlo
  2. Descargar una imagen
  3. Usa gdalinfo para determinar la información sobre la imagen.
  4. Usa gdal_translate para realizar una referencia geográfica de la imagen
  5. Usa gdalwarp para cambiar la proyección de la imagen.
  6. Usar gdal2tiles para dividir la imagen en mosaicos y crear el código KML asociado

Paso 1: Descarga e instala GDAL

Para comenzar, descarga e instala el GDAL como se detalla aquí.

Paso 2: Descarga una imagen

Puedes usar cualquier imagen. Existen varias fuentes de datos geográficos en la Web. Puedes usar cualquiera de ellas, pero deberías conocer los límites de la imagen, como la latitud y la longitud de cada una de sus esquinas. En este instructivo, se utiliza una imagen de la NASA de mármol azul, disponible para su descarga en el sitio web de la NASA. Estas imágenes fueron tomadas en 2004 y presentan una hermosa imagen de la Tierra desde el espacio. Elige uno de los archivos en la esquina inferior derecha de la barra de navegación derecha.

Si está usando su propia imagen y sabe que ya está georectificada, puede ir al paso 5. De lo contrario, continúe con el paso 3.

Paso 3: Obtén información sobre la imagen

Una vez que hayas instalado las bibliotecas de GDAL y seleccionado la imagen, debes obtener información sobre ella para poder realizar una referencia geográfica a ella. Específicamente, necesitas las posiciones de píxeles y líneas de cada esquina de la imagen. Si imaginas la imagen como una tabla, con columnas y filas, los píxeles son las columnas y las líneas son filas.

GDAL proporciona una utilidad útil, gdalinfo, para capturar esta información. En la línea de comandos, solo escribe gdalinfo filename y reemplaza filename por la ruta de acceso al archivo. Debería obtener un resultado similar al siguiente:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

La información importante para este instructivo son las líneas superior izquierda, inferior izquierda, superior derecha e inferior derecha. Estos indican los valores de píxeles y líneas de cada esquina. En este caso, la parte superior izquierda está en 0, 0 y la parte inferior derecha está en 21,600, 10,800.

Paso 4: Georeferencia a la imagen

En este caso, la referencia geográfica implica crear metadatos que describan la posición geográfica de cada una de las esquinas de la imagen. Puedes usar la información obtenida en los pasos 3 y gdal_translate para asignar información de referencia geográfica al archivo. Se creará un archivo VRT a partir de la imagen world_200401.jpg, bluemarble1.vrt. Los archivos VRT son archivos en formato XML que contienen la información sobre una transformación en particular; en este caso, el paso gdal_translate. La usará de nuevo en el siguiente paso para crear su conjunto final de mosaicos. gdal_translate te permite realizar varios tipos de resultados de archivos, incluidos los formatos de archivo de imagen principales. El uso de resultados de VRT le permite posponer la creación de archivos de salida hasta el último paso. Esto aumenta la eficiencia y disminuye el tiempo de espera para los pasos individuales si usa la línea de comandos. Este es el comando que debes ejecutar:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

Hay mucha información en esa línea, así que aquí la tenemos:

  • -of es el formato de salida, en este caso, VRT.
  • -a_srs asigna un sistema de referencia espacial al archivo. Esto le indica a cualquier aplicación que consume el sistema de coordenadas que se utiliza. En este caso, se utiliza EPSG:4326, que es igual a WGS84, el sistema de coordenadas que utiliza Google Earth.
  • -gcp, o punto de control en tierra, asigna las coordenadas a las posiciones del archivo. En este caso, solo necesitas tres puntos, ya que la imagen es un rectángulo y, por lo tanto, el cuarto punto se puede identificar fácilmente. Para -gcp, define el GCP estableciendo el píxel, el número de línea y, luego, la longitud y la latitud. Cada uno de ellos está separado por un espacio.
  • Los dos últimos parámetros son el archivo de origen y el de destino.

Paso 5: Distorsión de la imagen

La imagen original no se creó para un globo terráqueo redondo, sino para que parezca plana. En términos de GIS, es una proyección. Esto significa que es una representación bidimensional de un objeto tridimensional. La proyección requiere que se distorsione la imagen para que aparezca como esperas que se vea una imagen plana de la Tierra.

Para que se vea bien, tienes que deformar la imagen para que se adapte al globo terráqueo. Afortunadamente, GDAL también ofrece una gran herramienta para eso. Simplemente escribe gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. Se creará un archivo nuevo, bluemarble2.vrt, que proporciona metadatos sobre el procedimiento de preparación.

Paso 6: Crea las tarjetas

Ya casi terminas, pero esta parte te llevará más tiempo. Para crear los mosaicos, escribe gdal2tiles.py -p geodetic -k bluemarble2.vrt. El -k fuerza una salida KML. Esto creará una estructura de directorio con una súper superposición. Dado que cada uno de esos archivos de imagen debe crearse por separado, el proceso tarda un tiempo en ejecutarse. En el caso de las imágenes de gran tamaño, ahora es el momento de tomar una taza de café, tomar una siesta y comer algo ligero. Cuando termines, abre doc.kml y observa los resultados.

Conclusión

En este instructivo, solo se explica la superficie de lo que puede hacer GDAL, pero se proporciona un mecanismo práctico para generar mosaicos. Las bibliotecas de GDAL principales se escriben en C++, pero proporcionan vinculaciones para Perl, Python, VB6, R, Ruby, Java y C#.NET, lo que significa que puedes incorporar GDAL con facilidad en tus propias aplicaciones. Además, muchas de las utilidades, incluida gdal2tiles, se escriben en Python, lo que facilita su incorporación en aplicaciones de Python. gdal2tiles también puede generar páginas de Google Maps API y OpenLayers.