Come tradurre (riposizionare) un livello raster .tif?


10

Sto iniziando a usare QGIS per la mia tesi (fisica ambientale) e devo ammettere che sono abbastanza ignorante al riguardo - ho sempre usato Mathematica o Matlab.

Il mio problema è: ho un livello raster, in formato .tif, che è fuori posto (devo spostarlo a sud e ad ovest di 100 m). Devo tradurlo (riposizionarlo) e non ho assolutamente idea di come posso farlo.

Ho provato a trasformare Affine ma non funziona (non mi consente di selezionare un livello di input); Ho anche letto questo Come tradurre (riposizionare) un raster in Python? ma devo ammettere che non ne ho capito molto, ci ho provato diverse volte ma non sono bravo con Python.


Presumo che il livello .tif sia georeferenziato in qualche modo? Quale sistema di riferimento di coordinate è indicato nei metadati? Molto probabilmente, devi solo correggere le impostazioni CRS e il livello si allineerà.
underdark

grazie per il commento! sì, è georeferenziato e il sistema di coordinate è quello corretto (WGS 84 / UTM zona 32N) .. sfortunatamente lo spostamento proviene da un plugin (mal scritto) che devo usare e che non posso cambiare / correggere .. da qui la necessità di riposizionare il layer ...

Il plug-in di trasformazione affine è solo per livelli vettoriali.
AndreJ,

Risposte:


9

ah! Sono riuscito a farlo, seguendo quello che è stato detto nella discussione collegata .... ( Come tradurre (riposizionare) un raster in Python? ) Apparentemente mi ci è voluto un po 'di tempo per capire come usare la console Python! ;) grazie comunque! :)

Ho usato GDAL / Python, dalla console QGIS Python! :)

quello che ho scritto è stato:

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: cambiato "gdall.AllRegister ()" in "gdal.AllRegister ()".


C'è un errore di battitura di una lettera nel codice: gdall.AllRegister non dovrebbe essere scritto con due "L". (Genera: "'gdall' non è definito") Sfortunatamente non posso modificarlo poiché è necessario che una modifica sia lunga almeno 6 caratteri.
Smerla,

Questa risposta mi ha davvero aiutato! L'unica cosa che vorrei aggiungere è assicurarsi e controllare le tue unità prima di fare una trasformazione digitando una print(gtl)funzione. Ad esempio, il mio raster era in gg mm ss, e quindi per capire quanti metri sono in gradi decimali, ho usato la tabella disponibile qui (più facile per latitudine che longitudine!): Tabella per convertire i metri in gradi decimali
Justin Kray

1

Il Rasmoverplugin dovrebbe fare quello che vuoi.

Devi consentire ai plug-in sperimentali di ottenerlo nell'elenco dei plug-in.

Il risultato è un file raster virtuale, che è possibile modificare con un editor di testo per regolare i parametri, se necessario.


Non riesci a trovarlo ... forse non disponibile per 3.6?
foobaremade

1
Il plug-in è disponibile all'indirizzo github.com/geodrinx/rasmover , ma nessuna attività recente. Vedi osgeo-org.1560.x6.nabble.com/… e gis.stackexchange.com/questions/274074/… . Forse il plug-in Rasterbender può sostituirlo.
AndreJ

0

Nel caso speciale in cui il raster ha già una proiezione UTM e vuoi spostarlo longitudinalmente in un'altra zona UTM, ho scoperto che gdal_translatepuò farlo. Ad esempio, l'input raster si trova in qualsiasi zona UTM Z e si desidera spostarlo nella zona UTM 26 (ovvero, l'Oceano Atlantico alla maggior parte delle latitudini):

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

Le coordinate di origine e angolo nelle unità dello spazio modello riportate da gdalinforimangono invariate. Ma le coordinate d'angolo in latitudine / longitudine cambiano e il raster si è davvero spostato in un'altra parte del mondo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.