Projekt in Python mit GDAL neu projizieren

10

Ich habe große Probleme mit GDAL. Abgesehen von der zeitweise fehlenden Dokumentation scheint Python wenig Unterstützung zu bieten. Auf jeden Fall ist dies nur ein Batch-Reprojekt-Skript, das folgendermaßen abläuft:

source_file = gdal.Open(filepath.encode("ascii"))
source_wkt = source_file.GetProjectionRef()
source_srs = osr.SpatialReference()
source_srs.ImportFromWkt(source_wkt)                            

reproj_file = gdal.AutoCreateWarpedVRT(source_file, source_wkt, dest_wkt)
gdal.ReprojectImage(source_file, reproj_file, source_wkt, dest_wkt)
reproj_attributes = reproj_file.GetGeoTransform()

driver = gdal.GetDriverByName("GTiff")
dest_file = driver.CreateCopy(outputpath.encode("ascii"), reproj_file, 0)

Der Teil dest_srs und des_wkt ist in diesem Codeabschnitt nicht definiert, befindet sich jedoch außerhalb der Schleife (da er nur einmal definiert werden muss). Es scheint einmal zu funktionieren, ich kann ein gut aussehendes Tif daraus machen, mir dann einen 'ERROR 6 WriteBlock () nicht unterstützt' geben und Python stürzt ab. Dies sind alles GeoTIFFs, die auf dieselbe Weise mit denselben Basisdaten (nur zu unterschiedlichen Zeiten) erstellt wurden.

Aufgrund der Art der Neuprojektion (von GCS zu PCS) erzeugt AutoCreateWarpedVRT in der Regel viel Leerzeichen, gibt ihm jedoch den Wert 0, was ein Problem darstellt, da dies ein realer Datenwert sein kann. Gibt es eine Möglichkeit, den Nodata-Wert stattdessen auf -99 zu setzen?

wowohweewah
quelle
6
Ich nehme an, Sie haben einen Grund, dies in Python zu tun, aber nur um sicherzugehen: Sie wissen, dass der Hauptzweck des Dienstprogramms gdalwarp darin besteht, Raster neu zu projizieren? zB gdalwarp -t_srs '+proj=utm +zone=11 +datum=WGS84' raw_spot.tif utm11.tif. Es gibt es schon lange, es ist reich an Funktionen, gut getestet und wahrscheinlich schneller als ein reiner Python-Ansatz.
Matt Wilkie
Durch Entfernen der ReprojectImage-Reihenfolge projiziert mein Computer das Bild ohne Fehler neu.
Roger Veciana

Antworten:

3

In Bezug auf AutoCreateWarpedVRTLeerzeichen.

Werfen Sie einen Blick auf dieses gdal Fehlerticket .

Insbesondere heißt es dort:

Wenn ich diese Zeile in die im zweiten Schritt generierte Datei rgbwarped.vrt einfüge, ist alles in Ordnung:

<Option name="UNIFIED_SRC_NODATA">YES</Option>

C ++ - Anwendungen können diese Option direkt festlegen. Anwendungen, die AutoCreateWarpedVRT aus der SWIG-Bindung verwenden, müssen diese Zeile manuell in den Text der erstellten VRT einfügen.

Alex Markov
quelle
Ich versuche nicht , die OptionLösung, aber die Umstellung auf Aufruf gdalwarpdurch subprocesslöste das Problem mit nicht maskierter NoData.
j08lue