54 votos

¿Cómo llamar gdal_translate de código Python?

¿Es posible utilizar algunos gdal API para llamar a gdal_translate de código Python? ¿No significan simplemente ejecutando el gdal_translate.py desde el sistema de archivos, pero algo llamarlo de alguna manera en el código así que no necesito saber el directorio exacto el gdal_translate ejecutable?

31voto

Lucas Puntos 128

Consulte el Tutorial de APIde la GDAL.

#Import gdal
from osgeo import gdal

#Open existing dataset
src_ds = gdal.Open( src_filename )

#Open output format driver, see gdal_translate --formats for list
format = "GTiff"
driver = gdal.GetDriverByName( format )

#Output to new format
dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 )

#Properly close the datasets to flush to disk
dst_ds = None
src_ds = None

Si desea que más control, como cambiar el tamaño, subconjuntos, etc. de la salida... usar un VRT como entrada, esto es cómo gdal_translate lo hace internamente.

10voto

Nick Puntos 3115

Sí, usted puede llamar a la GDAL Utilidades desde dentro de Python. Hay muy pocas diferencias en el enfoque dependiendo de si la utilidad es un exe en su propio derecho, o también una pieza de código en python. De cualquier manera, aunque deberá utilizar el subproceso módulo:

import subprocess

# constants
gdalTranslate = r'C:\Program Files\GDAL\gdal_translate.exe'
src = r"C:\somefolder\somefile.tif"
dst = r"C:\someotherfolder\myresul.tif"
cmd = "-ot float32 -outsize 25 25"  # just for example!

# see note below
def youCanQuoteMe(item):
    return "\"" + item + "\""

fullCmd = ' '.join([gdalTranslate, cmd, youCanQuoteMe(src), youCanQuoteMe(dst)])
subprocess.popen(fullCmd)

Usted notará que puedo añadir escapó comillas alrededor de mis caminos. Esto es debido a que, en Windows, he tenido problemas con las rutas, especialmente aquellos con espacios o cuando uno de los '\' personajes hace otra accidental carácter de escape. Así, me acabo de preservar la ruta adecuada en aspec.

Si usted está utilizando uno de los python utilidades, acaba de hacer la misma cosa, excepto el archivo exe en el inicio del subproceso cadena de comando es ahora "C:\python32\python.exe" (o la versión que tengas) y su segundo elemento es el de python utilidad que desea utilizar.

Obviamente también se puede iterar a través de su sistema de archivos en lugar de utilizar rígida constantes, pero esto es sólo un ejemplo.

EDITAR - Generalizar para plugins de QGIS
QGIS crea/modifica una serie de variables de entorno en el arranque. Así, usted puede construir generalizada variables de ruta de acceso a las librerías GDAL/utilidades de uso de estos (ver Configuración->Opciones->system (Sistema) en lugar de las rutas rígida en el ejemplo anterior.

9voto

Max Puntos 195

Hago esto con varios comandos de gdal usando os.system que puede utilizar para llamar a funciones a partir de línea de comandos:

os.system("gdal_translate -of GTiff " + sourcefile + " " +  destinationfile)

También se describe en la lección 7 aquí: http://www.gis.usu.edu/~chrisg/python/2009/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X