Ist es möglich, eine gdal-API zum Aufrufen gdal_translate
von Python-Code zu verwenden? Ich meine nicht, einfach die Datei gdal_translate.exe aus dem Dateisystem auszuführen, sondern sie irgendwie im Code aufzurufen, damit ich nicht wissen muss, in welchem Verzeichnis sich die ausführbare Datei gdal_translate befindet.
40
Antworten:
Seit GDAL 2.1 (weitere Informationen hier ) können GDAL- und OGR-Dienstprogramme als Bibliotheksfunktionen verwendet werden. Zum Beispiel:
quelle
gdal.Translate()
sind hier aufgelistet: gdal.org/python/osgeo.gdal-module.html#TranslateOptionsSiehe das GDAL API Tutorial .
Wenn Sie mehr Ausgabesteuerung wünschen, wie z. B. Größenänderung, Teilmenge usw., verwenden Sie einen VRT als Eingabe. Dies geschieht intern durch gdal_translate.
quelle
Ja, Sie können die GDAL-Dienstprogramme in Python aufrufen. Je nachdem, ob es sich bei dem Dienstprogramm um eine eigenständige Exe oder um einen Python-Code handelt, gibt es nur geringfügige Unterschiede in der Vorgehensweise. In beiden Fällen müssen Sie das Unterprozessmodul verwenden :
Sie werden feststellen, dass ich meine Pfade in Anführungszeichen setze. Dies liegt daran, dass ich unter Windows Probleme mit Pfaden hatte, insbesondere mit Leerzeichen oder wenn eines der Zeichen '\' ein anderes versehentlich maskiertes Zeichen erzeugt. Also behalte ich sozusagen den richtigen Weg in aspec.
Wenn Sie eines der Python-Dienstprogramme verwenden, tun Sie dasselbe, mit der Ausnahme, dass Ihre Exe am Anfang der Unterprozessbefehlszeichenfolge jetzt "C: \ python32 \ python.exe" lautet (oder welche Version Sie auch haben) und Ihr zweites Element lautet das Python-Dienstprogramm, das Sie verwenden möchten.
Natürlich können Sie auch über Ihr Dateisystem iterieren, anstatt hartcodierte Konstanten zu verwenden, aber dies ist nur ein Beispiel.
BEARBEITEN - Generalisieren für QGIS-Plugins
QGIS erstellt / ändert beim Start eine Reihe von Umgebungsvariablen. Sie können also verallgemeinerte Pfadvariablen für die GDAL-Bibliotheken / -Dienstprogramme erstellen, indem Sie diese anstelle der fest codierten Pfade im obigen Beispiel verwenden (siehe Einstellungen-> Optionen-> System).
quelle
Ich mache das mit verschiedenen gdal-Befehlen unter Verwendung von os.system, mit denen Sie Funktionen wie von der Kommandozeile aus aufrufen können:
Es wird auch in Vorlesung 7 hier beschrieben: http://www.gis.usu.edu/~chrisg/python/2009/
quelle
subprocess.call
sicherer alsos.system
.gdal.Warp()
ein paar Stunden damitPG:
gerungen , eine DatenquellecutlineDSName
zu finden, um das Laufwerk zu betreibencutlineSQL
. (Ich weiß, richtig? Ein paar Stunden, die tatsächlich etwas bewirken ? Der Horror! </ Scherz>). Hat es irgendwann geklappt und scheint deutlich schneller zu sein alsos.system()
odersubprocess.call()
. Es macht ungefähr 2 Millionen Schnitte, also werde ich nicht wissen, ob es bis heute Abend tatsächlich schneller ist ... aber es funktioniert genau richtig.Hier ist ein kurzer Code für alle, die mit GDAL Translate in Python Bänder aus einem zusammengesetzten Multiband-TIF in einzelne Dateien speichern möchten.
Dies kann für die weitere Verarbeitung nützlich sein (z. B. mit Rasterio, wie hier ).
quelle