Jak przetłumaczyć (zmienić położenie) warstwy rastrowej .tif?

10

Zaczynam używać QGIS do mojej pracy magisterskiej (fizyka środowiska) i muszę przyznać, że jestem dość nieświadomy tego - zawsze używałem Mathematica lub Matlab.

Mój problem jest taki: mam warstwę rastrową w formacie .tif, która jest źle umieszczona (muszę przenieść ją na południe i zachód o 100 m). Muszę to przetłumaczyć (zmienić położenie) i absolutnie nie mam pojęcia, jak to zrobić.

Próbowałem przekształcić Affine, ale to nie działa (nie pozwala mi wybrać warstwy wejściowej); Przeczytałem również Jak przetłumaczyć (zmienić położenie) rastra w Pythonie? ale muszę przyznać, że nie zrozumiałem wiele z tego, próbowałem kilka razy, ale nie jestem dobry w Pythonie.

Maria
źródło
Zakładam, że warstwa .tif jest w jakiś sposób georeferencyjna? Który układ odniesienia za pomocą współrzędnych jest podany w metadanych? Całkiem prawdopodobne, że wystarczy poprawić ustawienia CRS, a warstwa się wyrówna.
podmrok
Dziękuję za komentarz! tak, jest on georeferencyjny, a układ współrzędnych jest prawidłowy (strefa WGS 84 / UTM 32N) .. niestety przesunięcie pochodzi z (źle napisanej) wtyczki, której muszę użyć i której nie mogę zmienić / poprawić .. stąd potrzeba zmiany położenia warstwy ...
Wtyczka Affine Transform jest przeznaczona tylko dla warstw wektorowych.
AndreJ

Odpowiedzi:

9

ah! Udało mi się to zrobić, postępując zgodnie z tym, co zostało powiedziane w powiązanej dyskusji .... ( Jak przetłumaczyć (zmienić położenie) rastra w Pythonie? ) Najwyraźniej zajęło mi trochę czasu, aby wymyślić, jak korzystać z konsoli Pythona! ;) W każdym razie dzięki! :)

Użyłem GDAL / Python z konsoli Python QGIS! :)

napisałem:

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

EDYCJA: przełączono „gdall.AllRegister ()” na „gdal.AllRegister ()”.

Maria
źródło
W kodzie jest literówka z jedną literą: gdall.AllRegister nie powinien być pisany dwoma literami „L”. (Generuje: „„ gdall ”nie jest zdefiniowany”) Niestety nie mogę go edytować, ponieważ edycja musi mieć co najmniej 6 znaków.
Smerla
Ta odpowiedź naprawdę mi pomogła! Jedyne, co chciałbym dodać, to upewnić się i sprawdzić swoje jednostki przed dokonaniem transformacji przez wpisanie print(gtl)funkcji. Na przykład mój raster był w dd mm ss, więc aby dowiedzieć się, ile metrów jest w stopniach dziesiętnych, skorzystałem z dostępnej tutaj tabeli (łatwiej dla szerokości i długości geograficznej!): Tabela do przeliczania metrów na stopnie dziesiętne
Justin Kray
1

RasmoverPlugin powinien robić, co chcesz.

Musisz zezwolić na wtyczki eksperymentalne, aby znalazły się na liście wtyczek.

Rezultatem jest wirtualny plik rastrowy, który można edytować za pomocą edytora tekstu, aby w razie potrzeby dostosować parametry.

AndreJ
źródło
Nie możesz go znaleźć ... może nie jest dostępny w wersji 3.6?
foobarbecue
1
Wtyczkę można znaleźć na stronie github.com/geodrinx/rasmover , ale nie ma w niej ostatniej aktywności. Zobacz osgeo-org.1560.x6.nabble.com/… i gis.stackexchange.com/questions/274074/… . Może wtyczka Rasterbender może go zastąpić.
AndreJ
0

W specjalnym przypadku, w którym raster ma już projekcję UTM, a chcesz przenieść ją wzdłużnie do innej strefy UTM, znalazłem, że gdal_translatemoże to zrobić. Na przykład raster wejściowy znajduje się w dowolnej strefie UTM Z, a użytkownik chce przenieść ją do strefy UTM 26 (tj. Na Oceanie Atlantyckim na większości szerokości geograficznych):

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

Współrzędne początkowe i narożne w jednostkach obszaru modelu zgłoszone przez gdalinfopozostają takie same. Ale współrzędne narożne w szerokości i długości geograficznej zmieniają się, a raster naprawdę przeniósł się do innej części świata.

Mike Finch
źródło