wywołanie gdal_merge w skrypcie python

10

Jestem nowy w Pythonie i łamie mi głowę, jak używać gdal_merge w skrypcie pythonowym (spyder). Używam Windows 10, Python 3.6 i mam zainstalowane narzędzie gdal z osgeo4w. Zdaję sobie sprawę, że wiele innych postów opisuje ten problem, ale żaden nie pomógł mi rozwiązać tego problemu.

Kiedy wywołuję moduł gdal z cmd, działa to jak urok:

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

Nie mogę jednak sprawić, by działał poprawnie w skrypcie python (spyder).

Pierwsze podejście daje wynik, ale nie ma właściwej nazwy: tworzy plik „out.tif”, a nie plik „scaled.tif”, jak żądam:

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

Drugie podejście po prostu nie daje wyników:

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

Wszelkie przemyślenia na temat rozwiązania tego problemu?

Carl
źródło

Odpowiedzi:

12

Dodaj pusty argument w pierwszym podejściu (ponieważ gdal_merge.pyanalizuje argumenty zaczynające się od 1, a nie 0):

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

Dołącz do ścieżki gdal_merge.pyw drugim podejściu :

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
źródło