¿Es posible usar alguna API de gdal para llamar gdal_translate
desde código Python? No me refiero simplemente a ejecutar gdal_translate.exe desde el sistema de archivos, sino a llamarlo de alguna manera en el código para que no necesite saber el directorio exacto en el que se encuentra el ejecutable gdal_translate.
40
Respuestas:
Desde GDAL 2.1 (más información aquí ), las utilidades GDAL y OGR pueden usarse como funciones de biblioteca. Por ejemplo:
fuente
gdal.Translate()
toma se enumeran aquí: gdal.org/python/osgeo.gdal-module.html#TranslateOptionsConsulte el tutorial de la API de GDAL .
Si desea más control de salida, como cambiar el tamaño, subconjunto, etc., use un VRT como entrada, así es como gdal_translate lo hace internamente.
fuente
Sí, puede llamar a las Utilidades GDAL desde Python. Existen diferencias muy pequeñas en el enfoque dependiendo de si la utilidad es un exe por derecho propio o también una pieza de código python. De cualquier manera, aunque necesita usar el módulo de subproceso :
Notarás que agrego comillas escapadas alrededor de mis caminos. Esto se debe a que, en Windows, he tenido problemas con las rutas, especialmente las que tienen espacios o donde uno de los caracteres '\' genera otro carácter de escape accidental. Entonces, solo conservo el camino correcto en aspec por así decirlo.
Si está utilizando una de las utilidades de python, simplemente haga lo mismo, excepto que su exe al comienzo de la cadena de comando del subproceso ahora es "C: \ python32 \ python.exe" (o la versión que tenga) y su segundo elemento es la utilidad python que quieres usar.
Obviamente, también puede iterar sobre su sistema de archivos en lugar de usar constantes codificadas, pero esto es solo un ejemplo.
EDITAR: generalización de los complementos
QGIS QGIS crea / modifica una serie de variables de entorno al inicio. Por lo tanto, puede crear variables de ruta generalizadas para las bibliotecas / utilidades GDAL utilizando estas (consulte Configuración-> Opciones-> Sistema) en lugar de las rutas codificadas en el ejemplo anterior.
fuente
Hago esto con varios comandos de gdal usando os.system que puedes usar para llamar funciones como desde la línea de comandos:
También se describe en la clase 7 aquí: http://www.gis.usu.edu/~chrisg/python/2009/
fuente
subprocess.call
es más seguro queos.system
.gdal.Warp()
durante un par de horas para obtener correctamente unaPG:
fuente de datoscutlineDSName
para conducir elcutlineSQL
. (Lo sé, ¿verdad? ¿Un par de horas realmente resolviendo algo ? ¡El horror! </kidding>). Finalmente funcionó, y parece ser significativamente más rápido queos.system()
osubprocess.call()
. Está haciendo ~ 2 millones de líneas de corte, por lo que no sabré si en realidad es más rápido hasta algún momento esta noche ... pero está funcionando exactamente bien.Aquí hay un código rápido para cualquier persona que desee guardar bandas de un TIF compuesto de múltiples bandas en archivos individuales utilizando GDAL Translate en Python.
Esto podría ser útil para un procesamiento posterior (por ejemplo, usando Rasterio, como aquí ).
fuente