Wie kann man eine .tif-Rasterebene übersetzen (neu positionieren)?

10

Ich fange an, QGIS für meine Diplomarbeit (Umweltphysik) zu verwenden und muss zugeben, dass ich ziemlich unwissend darüber bin - ich habe immer Mathematica oder Matlab verwendet.

Mein Problem ist: Ich habe eine Rasterebene im TIF-Format, die falsch platziert ist (ich muss sie um 100 m nach Süden und Westen verschieben). Ich muss es übersetzen (neu positionieren) und ich habe absolut keine Ahnung, wie ich das machen kann.

Ich habe Affine Transformation ausprobiert, aber es funktioniert nicht (ich kann keine Eingabeebene auswählen). Ich habe auch gelesen, wie man ein Raster in Python übersetzt (neu positioniert). aber ich muss zugeben, dass ich nicht viel davon verstanden habe, ich habe es mehrmals versucht, bin aber nicht gut mit Python.

Maria
quelle
Ich gehe davon aus, dass die .tif-Ebene in irgendeiner Weise georeferenziert ist. Welches Koordinatenreferenzsystem ist in den Metadaten angegeben? Sehr wahrscheinlich müssen Sie nur die CRS-Einstellungen korrigieren, und die Ebene wird ausgerichtet.
underdark
danke für den Kommentar! Ja, es ist georeferenziert und das Koordinatensystem ist das richtige (WGS 84 / UTM Zone 32N). Leider stammt die Verschiebung von einem (schlecht geschriebenen) Plugin, das ich verwenden muss und das ich nicht ändern / korrigieren kann .. daher die Notwendigkeit, die Ebene neu zu positionieren ...
Das Affine Transform Plugin ist nur für Vektorebenen.
AndreJ

Antworten:

9

Ah! Ich habe es geschafft, nach dem, was in der verknüpften Diskussion gesagt wurde ... ( Wie man ein Raster in Python übersetzt (neu positioniert)? ) Anscheinend habe ich nur eine Weile gebraucht, um herauszufinden, wie man die Python-Konsole benutzt! ;) trotzdem danke! :) :)

Ich habe GDAL / Python von der QGIS Python-Konsole aus verwendet! :) :)

Was ich schrieb war:

from osgeo import gdal
gdal.AllRegister()
rast_src = gdal.Open('filename.tif', 1 )
gt = rast_src.GetGeoTransform()
gtl = list(gt)
gtl[0] -= 200
gtl[3] -= 100
rast_src.SetGeoTransform(tuple(gtl))
rast_src = None

BEARBEITEN: "gdall.AllRegister ()" auf "gdal.AllRegister ()" umgestellt.

Maria
quelle
Der Code enthält einen Tippfehler mit einem Buchstaben: gdall.AllRegister darf nicht mit zwei "L" geschrieben werden. (Es generiert: "'gdall' ist nicht definiert") Leider kann ich es nicht bearbeiten, da eine Bearbeitung mindestens 6 Zeichen lang sein muss.
Smerla
Diese Antwort hat mir wirklich geholfen! Das einzige, was ich hinzufügen möchte, ist sicherzustellen, dass Sie Ihre Einheiten überprüfen, bevor Sie eine Transformation durchführen, indem Sie eine print(gtl)Funktion eingeben . Zum Beispiel war mein Raster in dd mm ss, und um herauszufinden, wie viele Meter in einem Dezimalgrad sind, habe ich die hier verfügbare Tabelle verwendet (einfacher für Breitengrad als Längengrad!): Tabelle zum Konvertieren von Metern in Dezimalgrad
Justin Kray
1

Das RasmoverPlugin sollte tun, was Sie wollen.

Sie müssen experimentelle Plugins zulassen, um sie in die Plugin-Liste aufzunehmen.

Das Ergebnis ist eine virtuelle Rasterdatei, die Sie mit einem Texteditor bearbeiten können, um die Parameter bei Bedarf anzupassen.

AndreJ
quelle
Konnte es nicht finden ... vielleicht nicht verfügbar für 3.6?
Foobarbecue
1
Das Plugin finden Sie unter github.com/geodrinx/rasmover , aber keine aktuellen Aktivitäten. Siehe osgeo-org.1560.x6.nabble.com/… und gis.stackexchange.com/questions/274074/… . Vielleicht kann das Rasterbender-Plugin es ersetzen.
AndreJ
0

In dem speziellen Fall, in dem das Raster bereits eine UTM-Projektion hat und Sie es in Längsrichtung in eine andere UTM-Zone verschieben möchten, habe ich festgestellt, dass gdal_translatedies möglich ist. Das Eingabe-Raster befindet sich beispielsweise in einer beliebigen UTM-Zone Z, und Sie möchten es in die UTM-Zone 26 (dh den Atlantik in den meisten Breiten) verschieben:

gdal_translate -a_srs '+proj=utm +zone=26 +datum=WGS84' input.tif output.tif

Die von und gemeldeten Ursprungs- und Eckkoordinaten in Modellraumeinheiten gdalinfobleiben gleich. Aber die Eckkoordinaten in Breiten- / Längengrad ändern sich, und das Raster hat sich wirklich in einen anderen Teil der Welt bewegt.

Mike Finch
quelle