Bagaimana cara menerjemahkan (memposisikan ulang) lapisan raster .tif?

10

Saya mulai menggunakan QGIS untuk tesis saya (fisika lingkungan) dan harus mengakui bahwa saya tidak tahu - saya selalu menggunakan Mathematica atau Matlab.

Masalah saya adalah: Saya memiliki layer raster, dalam format .tif, yang salah tempat (saya perlu memindahkannya ke selatan dan barat sampai 100 m). Saya perlu menerjemahkan (memposisikan ulang) itu, dan saya sama sekali tidak tahu bagaimana saya bisa melakukannya.

Saya sudah mencoba Affine transform tetapi tidak berhasil (jangan biarkan saya memilih layer input); Saya juga membaca ini Bagaimana menerjemahkan (memposisikan) raster dengan Python? tetapi saya harus mengakui bahwa saya tidak mengerti banyak tentang hal itu, saya mencoba beberapa kali tetapi tidak baik dengan python.

Maria
sumber
Saya berasumsi lapisan .tif georeferensi dalam beberapa cara? Sistem referensi koordinat mana yang dinyatakan dalam metadata? Kemungkinan besar, Anda hanya perlu memperbaiki pengaturan CRS dan lapisan akan menyelaraskan.
underdark
terima kasih atas komentarnya! ya, ini adalah georeferensi, dan sistem koordinat adalah yang benar (WGS 84 / UTM zone 32N) .. sayangnya perpindahan berasal dari plugin (yang ditulis dengan buruk) yang perlu saya gunakan, dan bahwa saya tidak dapat mengubah / memperbaiki .. maka dari itu perlu memposisikan ulang lapisan ...
Plugin Affine Transform hanya untuk lapisan vektor.
AndreJ

Jawaban:

9

ah! Saya berhasil melakukannya, mengikuti apa yang dikatakan dalam diskusi terkait .... ( Bagaimana menerjemahkan (memposisikan ulang) sebuah raster dengan Python? ) Ternyata hanya butuh beberapa saat untuk mencari cara menggunakan konsol python! ;) terima kasih! :)

Saya menggunakan GDAL / Python, dari konsol Python QGIS! :)

apa yang saya tulis adalah:

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

EDIT: beralih "gdall.AllRegister ()" ke "gdal.AllRegister ()".

Maria
sumber
Ada salah ketik satu huruf dalam kode: gdall.AllRegister tidak seharusnya dieja dengan dua "L". (Ini menghasilkan: "'gdall' tidak didefinisikan") Sayangnya saya tidak dapat mengeditnya karena pengeditan harus memiliki setidaknya 6 karakter.
Smerla
Jawaban ini sangat membantu saya! Satu-satunya hal yang ingin saya tambahkan adalah memastikan dan memeriksa unit Anda sebelum melakukan transformasi dengan mengetikkan print(gtl)fungsi. Misalnya, raster saya dalam dd mm ss, dan untuk mengetahui berapa meter dalam derajat desimal, saya menggunakan tabel yang tersedia di sini (lebih mudah untuk lintang daripada bujur!): Tabel untuk mengkonversi meter ke derajat desimal
Justin Kray
1

The RasmoverPlugin harus melakukan apa yang Anda inginkan.

Anda harus mengizinkan plugin eksperimental untuk mendapatkannya di daftar plugin.

Hasilnya adalah file raster virtual, yang dapat Anda edit dengan editor teks untuk menyesuaikan parameter jika diperlukan.

AndreJ
sumber
Tidak dapat menemukannya ... mungkin tidak tersedia untuk 3,6?
foobarbecue
1
Plugin ini dapat ditemukan di github.com/geodrinx/rasmover , tetapi tidak ada aktivitas terbaru. Lihat osgeo-org.1560.x6.nabble.com/… dan gis.stackexchange.com/questions/274074/… . Mungkin plugin Rasterbender dapat menggantikannya.
AndreJ
0

Dalam kasus khusus di mana raster sudah memiliki proyeksi UTM, dan Anda ingin memindahkannya secara longitudinal ke zona UTM lain, saya menemukan itu gdal_translatebisa melakukannya. Misalnya, input raster ada di zona UTM Z apa pun, dan Anda ingin memindahkannya ke zona UTM 26 (yaitu, Samudra Atlantik paling banyak garis lintang):

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

Asal dan sudut koordinat dalam unit ruang model seperti yang dilaporkan gdalinfotetap sama. Tetapi sudut koordinat dalam perubahan lintang / bujur, dan raster benar-benar pindah ke bagian lain dunia.

Mike Finch
sumber