вызов gdal_merge в скрипт Python

10

Я новичок в python и ломаю голову над тем, как использовать gdal_merge в (spyder) скрипте python. Я использую Windows 10, Python 3.6 и у меня установлен инструмент gdal из osgeo4w. Я понимаю, что многие другие сообщения описывают эту проблему, но ни одна не может помочь мне решить эту проблему.

Когда я вызываю модуль gdal из cmd, он работает как шарм:

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

Тем не менее, я не могу заставить его работать должным образом в сценарии Python (Spyder).

Первый подход производит вывод, но не с правильным именем: он производит файл 'out.tif', а не файл 'merged.tif', как я запрашиваю:

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

Второй подход просто не дает вывода:

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

Есть мысли о том, как решить эту проблему?

деревенщина
источник

Ответы:

12

Добавьте пустой аргумент в первом подходе (потому что gdal_merge.pyанализирует аргументы, начиная с 1, а не с 0):

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

Присоединяйтесь к пути gdal_merge.pyво втором подходе :

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)
Антонио Фальчано
источник