¿Cómo traducir (reposicionar) una capa ráster .tif?

10

Estoy empezando a usar QGIS para mi tesis (física ambiental) y tengo que admitir que soy bastante ignorante al respecto: siempre he usado Mathematica o Matlab.

Mi problema es: tengo una capa ráster, en formato .tif, que está fuera de lugar (necesito moverla al sur y al oeste por 100 m). Necesito traducirlo (reposicionarlo), y no tengo ni idea de cómo puedo hacer eso.

He intentado la transformación Affine pero no funciona (no me permite seleccionar una capa de entrada); También he leído esto ¿Cómo traducir (reposicionar) un ráster en Python? pero tengo que admitir que no he entendido mucho, lo intenté varias veces pero no soy bueno con python.

maria
fuente
Supongo que la capa .tif está georeferenciada de alguna manera? ¿Qué sistema de referencia de coordenadas se indica en los metadatos? Muy probablemente, solo necesita corregir la configuración de CRS y la capa se alineará.
oscuro
¡gracias por el comentario! sí, está georreferenciado y el sistema de coordenadas es el correcto (WGS 84 / UTM zona 32N) ... desafortunadamente el desplazamiento proviene de un complemento (mal escrito) que necesito usar, y que no puedo cambiar / corregir .. de ahí la necesidad de reposicionar la capa ...
El complemento Affine Transform es solo para capas vectoriales.
AndreJ

Respuestas:

9

ah! Me las arreglé para hacerlo, siguiendo lo que se dijo en la discusión vinculada ... ( ¿Cómo traducir (reposicionar) un ráster en Python? ) ¡Aparentemente me tomó un tiempo descubrir cómo usar la consola de Python! ;) ¡gracias de todos modos! :)

¡Utilicé GDAL / Python, desde la consola QGIS Python! :)

lo que escribí fue:

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

EDITAR: cambió "gdall.AllRegister ()" a "gdal.AllRegister ()".

maria
fuente
Hay un error tipográfico de una letra en el código: gdall.AllRegister no se debe deletrear con dos "L". (Genera: "'gdall' no está definido") Desafortunadamente no puedo editarlo ya que se requiere una edición de al menos 6 caracteres de largo.
Smerla
¡Esta respuesta realmente me ayudó! Lo único que me gustaría agregar es asegurarme y verificar sus unidades antes de hacer una transformación escribiendo una print(gtl)función. Por ejemplo, mi ráster estaba en dd mm ss, y para calcular cuántos metros hay en un grado decimal, utilicé la tabla disponible aquí (¡más fácil para la latitud que la longitud!): Tabla para convertir metros a grados decimales
Justin Kray
1

El Rasmovercomplemento debe hacer lo que quieras.

Debe permitir que los complementos experimentales lo incluyan en la lista de complementos.

El resultado es un archivo ráster virtual, que puede editar con un editor de texto para ajustar los parámetros si es necesario.

AndreJ
fuente
No pude encontrarlo ... ¿tal vez no está disponible para 3.6?
foobarbecue
1
El complemento se puede encontrar en github.com/geodrinx/rasmover , pero no hay actividad reciente. Ver osgeo-org.1560.x6.nabble.com/… y gis.stackexchange.com/questions/274074/… . Tal vez el complemento Rasterbender pueda sustituirlo.
AndreJ
0

En el caso especial donde el ráster ya tiene una proyección UTM, y desea moverlo longitudinalmente a otra zona UTM, descubrí que gdal_translatepuede hacerlo. Por ejemplo, el ráster de entrada se encuentra en cualquier zona UTM Z y desea moverlo a la zona UTM 26 (es decir, el Océano Atlántico en la mayoría de las latitudes):

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

Las coordenadas de origen y esquina en las unidades de espacio modelo, según lo informado, gdalinfopermanecen iguales. Pero las coordenadas de la esquina en la latitud / longitud cambian, y la trama realmente se movió a otra parte del mundo.

Mike Finch
fuente