chamando gdal_merge no script python

10

Eu sou novo no python e estou pensando em como usar o gdal_merge em um script python (spyder). Eu uso o Windows 10, Python 3.6 e tenho a ferramenta gdal instalada no osgeo4w. Sei que muitas outras postagens descrevem esse problema, mas nenhuma poderia me ajudar a resolver esse problema.

Quando eu chamo o módulo gdal do cmd, ele funciona como um encanto:

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

No entanto, não consigo fazê-lo funcionar corretamente em um script python (spyder).

Uma primeira abordagem produz uma saída, mas não com o nome correto: produz um arquivo 'out.tif' e não o arquivo 'mesclado.tif' conforme solicitado:

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

Uma segunda abordagem simplesmente não produz saída:

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

Alguma idéia de como resolver esse problema?

Carl
fonte

Respostas:

12

Adicione um argumento vazio na primeira abordagem (porque gdal_merge.pyanalisa argumentos começando de 1 e não 0):

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

Junte-se ao caminho de gdal_merge.pyna segunda abordagem :

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
fonte