Comment traduire (repositionner) une couche raster .tif?


10

Je commence à utiliser QGIS pour ma thèse (physique de l'environnement) et je dois admettre que je l'ignore assez - j'ai toujours utilisé Mathematica ou Matlab.

Mon problème est: j'ai une couche raster, au format .tif, qui est mal placée (j'ai besoin de la déplacer vers le sud et l'ouest de 100m). J'ai besoin de le traduire (repositionner), et je n'ai absolument aucune idée de comment je peux le faire.

J'ai essayé la transformation Affine mais cela ne fonctionne pas (ne me permet pas de sélectionner une couche d'entrée); J'ai également lu ceci Comment traduire (repositionner) un raster en Python? mais je dois admettre que je ne l'ai pas beaucoup compris, j'ai essayé plusieurs fois mais je ne suis pas bon avec python.


Je suppose que la couche .tif est géoréférencée d'une manière ou d'une autre? Quel système de référence de coordonnées est indiqué dans les métadonnées? Très probablement, il vous suffit de corriger les paramètres CRS et la couche s'alignera.
underdark

Merci pour le commentaire! oui, il est géoréférencé et le système de coordonnées est le bon (WGS 84 / UTM zone 32N) ... malheureusement le déplacement provient d'un plugin (mal écrit) que je dois utiliser, et que je ne peux pas changer / corriger .. d'où la nécessité de repositionner le calque ...

Le plugin Affine Transform est réservé aux couches vectorielles.
AndreJ

Réponses:


9

ah! J'ai réussi à le faire, en suivant ce qui a été dit dans la discussion liée .... ( Comment traduire (repositionner) un raster en Python? ) Apparemment, il m'a juste fallu un certain temps pour comprendre comment utiliser la console python! ;) Merci quand même! :)

J'ai utilisé GDAL / Python, depuis la console QGIS Python! :)

ce que j'ai écrit était:

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: a changé "gdall.AllRegister ()" en "gdal.AllRegister ()".


Il y a une faute de frappe d'une lettre dans le code: gdall.AllRegister n'est pas censé être orthographié avec deux "L". (Il génère: "'gdall' n'est pas défini") Malheureusement, je ne peux pas le modifier car une modification doit comporter au moins 6 caractères.
Smerla

Cette réponse m'a vraiment aidé! La seule chose que je voudrais ajouter est de vous assurer et de vérifier vos unités avant de faire une transformation en tapant une print(gtl)fonction. Par exemple, mon raster était en jj mm ss, et donc pour comprendre combien de mètres sont en degrés décimaux, j'ai utilisé le tableau disponible ici (plus facile pour la latitude que la longitude!): Tableau pour convertir les mètres en degrés décimaux
Justin Kray

1

Le Rasmoverplugin devrait faire ce que vous voulez.

Vous devez autoriser les plugins expérimentaux à l'obtenir dans la liste des plugins.

Le résultat est un fichier raster virtuel, que vous pouvez modifier avec un éditeur de texte pour ajuster les paramètres si nécessaire.


Impossible de le trouver ... peut-être pas disponible pour 3.6?
foobar barbecue

1
Le plugin peut être trouvé sur github.com/geodrinx/rasmover , mais aucune activité récente. Voir osgeo-org.1560.x6.nabble.com/… et gis.stackexchange.com/questions/274074/… . Peut-être que le plugin Rasterbender peut le remplacer.
AndreJ

0

Dans le cas spécial où le raster a déjà une projection UTM et que vous souhaitez le déplacer longitudinalement vers une autre zone UTM, j'ai trouvé que cela gdal_translatepouvait le faire. Par exemple, le raster en entrée se trouve dans n'importe quelle zone UTM Z, et vous souhaitez le déplacer vers la zone UTM 26 (c'est-à-dire l'océan Atlantique à la plupart des latitudes):

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

Les coordonnées d'origine et d'angle dans les unités spatiales du modèle, telles que rapportées par, gdalinforestent les mêmes. Mais les coordonnées des coins dans la latitude / longitude changent, et le raster s'est vraiment déplacé vers une autre partie du monde.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.