llamando a gdal_merge al script de Python

10

Soy nuevo en python y rompo la cabeza sobre cómo usar gdal_merge en un script de python (spyder). Uso Windows 10, Python 3.6 y tengo la herramienta gdal instalada desde osgeo4w. Me doy cuenta de que muchas otras publicaciones describen este problema, pero ninguna podría ayudarme a resolverlo.

Cuando llamo al módulo gdal desde cmd, funciona de maravilla:

 python "C:\OSGeo4W64\bin\gdal_merge.py" -o merged.tif input1.tif input2.tif

Sin embargo, no puedo hacer que funcione correctamente en un script de python (spyder).

Un primer enfoque produce una salida pero no con el nombre correcto: produce un archivo 'out.tif' y no el archivo 'merged.tif' como solicito:

import sys
sys.path.append('C:\\OSGeo4W64\\bin')
import gdal_merge as gm
gm.main(['-o', 'merged.tif', 'N00W078.tif', 'N00W079.tif'])

Un segundo enfoque simplemente no produce salida:

import subprocess
merge_command = ["python", "C:\OSGeo4W64\bin\gdal_merge.py", "-o", "merged.tif", "input1.tif", "input2.tif"]
subprocess.call(merge_command,shell=True)

¿Alguna idea sobre cómo resolver este problema?

Carl
fuente

Respuestas:

12

Agregue un argumento vacío en el primer enfoque (porque gdal_merge.pyanaliza los argumentos a partir de 1 y no de 0):

import sys
sys.path.append('C:\\OSGeo4W64\\bin')
import gdal_merge as gm
gm.main(['', '-o', 'merged.tif', 'N00W078.tif', 'N00W079.tif'])

Únete al camino de gdal_merge.pyen el segundo enfoque :

import os, subprocess
gm = os.path.join('C:\\','OSGeo4W64','bin','gdal_merge.py')
merge_command = ["python", gm, "-o", "merged.tif", "input1.tif", "input2.tif"]
subprocess.call(merge_command,shell=True)
Antonio Falciano
fuente