Bir .tif raster katmanı nasıl tercüme edilir (yeniden konumlandırılır)?


10

Tezim için QGIS kullanmaya başladım (çevre fiziği) ve itiraf etmeliyim ki bu konuda oldukça bilgisizim - Her zaman Mathematica veya Matlab kullandım.

Benim sorunum: Yanlış yerleştirilmiş bir raster katmanım var. Bu, yanlış yerleştirilmiş (güneye ve batıya 100 metre hareket ettirmem gerekiyor). Çevirmem (yeniden konumlandırmam) gerekiyor ve bunu nasıl yapabileceğim konusunda hiçbir fikrim yok.

Afin dönüşümü denedim ama çalışmıyor (bir giriş katmanı seçmeme izin vermiyor); Bunu da okudum Python'da bir raster nasıl tercüme edilir (yeniden konumlandırılır)? ama itiraf etmeliyim ki çok fazla anlamadım, birkaç kez denedim ama python ile iyi değilim.


.Tif katmanının bir şekilde georeference olduğunu varsayıyorum? Meta verilerde hangi koordinat referans sistemi belirtilir? Büyük olasılıkla, sadece CRS ayarlarını düzeltmeniz gerekir ve katman hizalanır.
underdark

yorum için teşekkürler! evet, coğrafi referanslıdır ve koordinat sistemi doğrudur (WGS 84 / UTM bölge 32N) .. ne yazık ki yer değiştirme kullanmam gereken (kötü yazılmış) bir eklentiden geliyor ve değiştiremiyorum / düzeltemiyorum .. dolayısıyla katmanı yeniden konumlandırma ihtiyacı ...

Affine Transform eklentisi yalnızca vektör katmanları içindir.
AndreJ

Yanıtlar:


9

Ah! Ben, bunu başardı bağlantılı tartışmada söylenmiştir ne Aşağıdaki .... ( Python nasıl çevrilir? (Yeniden konumlandırmak) bir raster? ) Görünüşte sadece götürdü bir piton konsolu nasıl kullanılacağını rakama süre! ;) Yine de teşekkürler! :)

QGIS Python konsolundan GDAL / Python kullandım! :)

yazdım:

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: "gdall.AllRegister ()" anahtarını "gdal.AllRegister ()" olarak değiştirdi.


Kodda bir harfli yazım hatası vardır: gdall.AllRegister iki "L" ile yazılmamalıdır. (Bu üretir: "'gdall' tanımlı değil") Ne yazık ki bir düzenleme en az 6 karakter uzunluğunda olması gerektiği gibi düzenleyemiyorum.
Smerla

Bu cevap bana gerçekten yardımcı oldu! Eklemek istediğim tek şey, bir print(gtl)işlev yazarak bir dönüşüm yapmadan önce ünitelerinizi kontrol etmek ve kontrol etmektir . Örneğin, rasterim dd mm ss idi ve bu nedenle ondalık derecede kaç metrenin olduğunu anlamak için, burada mevcut olan tabloyu kullandım (enlem için boylamdan daha kolay!):
Metreleri

1

RasmoverEklenti istediğini yapmalıdır.

Deneysel eklentilerin eklenti listesine girmesine izin vermelisiniz.

Sonuç, gerekirse parametreleri ayarlamak için bir metin düzenleyicisiyle düzenleyebileceğiniz sanal bir tarama dosyasıdır.


Bulamadı ... 3.6 için uygun değil mi?
foobarbecue

1
Eklenti github.com/geodrinx/rasmover adresinde bulunabilir , ancak yeni bir etkinlik yoktur. Bkz. Osgeo-org.1560.x6.nabble.com/… ve gis.stackexchange.com/questions/274074/… . Belki Rasterbender eklentisi onun yerini alabilir.
AndreJ

0

Rasterin zaten bir UTM projeksiyonu olduğu ve onu uzunlamasına başka bir UTM bölgesine taşımak istediğiniz özel durumda, bunu gdal_translateyapabilirim. Örneğin, giriş raster herhangi bir UTM bölge Z'de ve onu UTM bölge 26'ya (yani en çok enlemde Atlantik Okyanusu) taşımak istiyorsunuz:

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

Tarafından rapor edilen model uzay birimlerindeki başlangıç ​​noktası ve köşe koordinatları gdalinfoaynı kalır. Ancak köşe enlem / boylam değişiminde koordine olur ve raster gerçekten dünyanın başka bir yerine taşındı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.