¿Cómo cortar una 'imagen en mosaico' de un dataset ráster usando GDAL?

22

Estoy trabajando en una aplicación que necesita crear mosaicos (jpeg) a partir de un conjunto de datos ráster dado. Mi inclinación inicial era usar gdal2tiles.py, pero su rendimiento parece que podría mejorarse.

Eso me lleva a hacer la siguiente pregunta: ¿Cuál sería la forma más rápida de cortar una 'imagen en mosaico' de un dataset ráster usando GDAL? Y por 'imagen en mosaico', me refiero a un simple JPEG o PNG.

En mi prototipo, utilizo los enlaces MapServer C # MapScript para hacer el trabajo. Es decir, creo un objeto de mapa, recorro todos los límites de mosaico que necesito cortar, establezco la extensión de los objetos de mapa y luego guardo la imagen resultante. El rendimiento de este enfoque es significativamente mejor que el de gdal2tiles.py, pero me pregunto si uso GDAL directamente si no puedo hacerlo aún más rápido. ¿Alguien puede sugerir un flujo de trabajo similar con los métodos GDAL?

EDITAR: Después de investigar un poco más hoy, encontré la respuesta justo frente a mí. Si ha descargado FWTools, las carpetas csharp \ apps contienen varias clases para demostrar los enlaces C # GDAL. En mi caso, GDALRead.cs y GDALReadDirect.cs eran lo que estaba buscando.

usuario890
fuente
2
@vadp, @markusn, @mapperz y todos los demás, por favor sea descriptivo. Además del enlace, una o dos oraciones sobre por qué crees que vale la pena ver esta herramienta y qué diferencia de las demás será útil. Queremos que la respuesta sea útil en el futuro, así como de inmediato. Tarde o temprano, se produce la rotura de enlaces y si todo lo que tenemos es la URL, es difícil encontrar dónde se encarnó el proyecto.
Matt Wilkie
44
Hola usuario890, ¿podría publicar su solución final a la pregunta y marcarla como cerrada? en este caso, parece que usar los enlaces específicos del idioma le dio el rendimiento que necesita.
scw
No puedo agregar un comentario a mi propia publicación :( Pero gdal_tiler.py también admite multiprocesamiento, pero de una manera muy bruta: simplemente procesa fuentes 'n' a la vez. Sin embargo, tiene algún efecto positivo :)
Vadim

Respuestas:

5

Alguien ha pasado el tiempo para hacer que gdal2tiles.py use múltiples procesadores: gdal paralelo

He usado esto y parece funcionar. Utiliza con éxito los 4 núcleos al 100% y reduce el tiempo total para crear los mosaicos a un cuarto del tiempo original.

Hazzey
fuente
Puede consultar gdal2tiles_parallel.py gitlab.com/GitLabRGI/geopackage-python . Prefiero comme
GeospatialInformationTech
1

En mi empresa, escribimos scripts de Python personalizados, usando gdal_warp (fue antes de que supiéramos que existían gdal2tiles). Fue más rápido que g2t, especialmente cuando lo reescribimos para que se ejecute en muchos núcleos (usando python threadpool). También produjo mosaicos de mayor calidad (la interpolación de lanczos en g2t parece funcionar mal, en gdal_warp los mosaicos resultantes fueron sorprendentes).

Se necesita un poco de esfuerzo para escribir los scripts, debe calcular manualmente los cuadros delimitadores resultantes, configurar algunas opciones para proyecciones, etc.

stachu
fuente
0

Otra opción es usar TileCache (WMS-C). Aunque nunca he usado gdal2tiles, no esperaría que TileCache trajera un rendimiento mejorado.

De todos modos, las siguientes estrategias pueden acelerar el mosaico:

  • Metatilización, si usa TileCache (me pregunto si gdal2tiles tiene una característica similar).
  • En caso de que los datos ráster sean una gran ortofoto, use un formato como ECW . Dado que este formato presenta descompresión parcial , al usar este formato puede obtener una ganancia de rendimiento significativa.
dariapra
fuente
0

El script gdal_tiler.py de http://code.google.com/p/tilers-tools podría ser una opción útil.

Por lo general, muestra un rendimiento muy bueno en comparación con gdal2tiles.py y debería funcionar con cualquier fuente GDAL (conjunto de datos), en particular, no requiere la conversión de un conjunto de datos fuente a RGB.

Vadim
fuente
-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Si geopackage o MBTILES no se necesita python, eso se hace de forma nativa con gdal_translate.EXE. también necesita ejecutar gdaladdo para agregar más de un nivel de zoom. También uso qtiles / qmetatiles para qgis desktop. Todavía nada puede competir con el software comercial maptiler pro. Si necesita una carpeta de mosaicos, simplemente convierta MBTILES a TMS O XYZ con mbUtil python

Información GeoespacialTecnología
fuente
El enlace ya no funciona
AndrewHarvey