Czy można używać API gdal do wywoływania gdal_translate
z kodu Python? Nie chodzi mi po prostu o uruchomienie gdal_translate.exe z systemu plików, ale raczej wywołanie go w kodzie, więc nie muszę znać dokładnego katalogu, w którym znajduje się plik wykonywalny gdal_translate?
40
Odpowiedzi:
Od GDAL 2.1 (więcej informacji tutaj ), narzędzia GDAL i OGR mogą być używane jako funkcje biblioteczne. Na przykład:
źródło
gdal.Translate()
są wymienione tutaj: gdal.org/python/osgeo.gdal-module.html#TranslateOptionsZobacz samouczek interfejsu API GDAL .
Jeśli chcesz mieć większą kontrolę wyjściową, taką jak zmiana rozmiaru, podzbiór itp., Użyj VRT jako danych wejściowych, w ten sposób gdal_translate robi to wewnętrznie.
źródło
Tak, możesz wywołać narzędzia GDAL z poziomu Pythona. Istnieją bardzo niewielkie różnice w podejściu w zależności od tego, czy narzędzie to samo w sobie exe, czy też fragment kodu python. Tak czy inaczej, musisz użyć modułu podprocesu :
Zauważysz, że dodaję znaki cudzysłowu wokół moich ścieżek. Wynika to z faktu, że w systemie Windows miałem problemy ze ścieżkami, zwłaszcza ze spacjami lub gdy jedna z postaci „\” tworzy inną przypadkową postać, która uciekła. Więc po prostu zachowuję właściwą ścieżkę w Aspec.
Jeśli używasz jednego z narzędzi Pythona, po prostu zrób to samo, z tym że exe na początku łańcucha poleceń podprocesu ma teraz nazwę „C: \ python32 \ python.exe” (lub jakąkolwiek wersję masz), a drugim elementem jest narzędzie python, którego chcesz użyć.
Oczywiście możesz również iterować system plików zamiast używać stałych zakodowanych, ale to tylko przykład.
EDYCJA - Generalizacja dla wtyczek
QGIS QGIS tworzy / modyfikuje wiele zmiennych środowiskowych podczas uruchamiania. Możesz więc budować uogólnione zmienne ścieżki do bibliotek / narzędzi GDAL, używając tych (patrz Ustawienia-> Opcje-> System) zamiast ścieżek zakodowanych na stałe w powyższym przykładzie.
źródło
Robię to za pomocą różnych poleceń gdal za pomocą systemu os.system, którego można używać do wywoływania funkcji tak jak z wiersza poleceń:
Jest to również opisane w wykładzie 7 tutaj: http://www.gis.usu.edu/~chrisg/python/2009/
źródło
subprocess.call
Jest także bezpieczniejszy niżos.system
.gdal.Warp()
kilkoma godzinami, aby właściwie zdobyćPG:
źródło danych,cutlineDSName
aby prowadzićcutlineSQL
. (Wiem, prawda? Kilka godzin faktycznie coś wymyśliłem ? Horror! </kidding>). W końcu działa i wydaje się, że jest znacznie szybszy niżos.system()
lubsubprocess.call()
. Robi ~ 2 miliony linii odcięcia, więc nie będę wiedział, czy to rzeczywiście szybciej do pewnego czasu dzisiejszej nocy ... ale działa dokładnie dobrze.Oto szybki kod dla każdego, kto chce zapisać pasma z wielopasmowego kompozytu TIF do pojedynczych plików za pomocą GDAL Translate w Pythonie.
Może to być przydatne do dalszego przetwarzania (np. Przy użyciu Rasterio, jak tutaj ).
źródło