appeler gdal_merge dans un script python

10

Je suis nouveau sur python et je me suis cassé la tête sur la façon d'utiliser gdal_merge dans un script python (spyder). J'utilise Windows 10, Python 3.6 et j'ai installé l'outil gdal à partir d'osgeo4w. Je me rends compte que de nombreux autres messages décrivent ce problème, mais aucun ne pourrait m'aider à résoudre ce problème.

Lorsque j'appelle le module gdal depuis cmd, cela fonctionne comme un charme:

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

Cependant, je ne peux pas le faire fonctionner correctement dans un script python (spyder).

Une première approche produit une sortie mais pas avec le bon nom: elle produit un fichier 'out.tif' et non le fichier 'merged.tif' comme je le demande:

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

Une deuxième approche ne produit tout simplement aucun résultat:

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

Avez-vous des réflexions sur la façon de résoudre ce problème?

Carl
la source

Réponses:

12

Ajoutez un argument vide dans la première approche (car gdal_merge.pyanalyse les arguments à partir de 1 et non de 0):

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

Rejoignez le chemin de gdal_merge.pyla deuxième approche :

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
la source