Como traduzir (reposicionar) uma camada rasterizada .tif?

10

Estou começando a usar o QGIS para minha tese (física ambiental) e tenho que admitir que sou bastante ignorante sobre isso - sempre usei o Mathematica ou o Matlab.

Meu problema é: tenho uma camada de varredura, no formato .tif, que está extraviada (preciso movê-la para o sul e oeste por 100m). Preciso traduzi-lo (reposicioná-lo) e não tenho absolutamente nenhuma idéia de como posso fazer isso.

Eu tentei transformar Affine, mas não funciona (não me permite selecionar uma camada de entrada); Eu também li isso Como traduzir (reposicionar) uma varredura em Python? mas tenho que admitir que não entendi muito, tentei várias vezes, mas não sou bom com python.

maria
fonte
Presumo que a camada .tif seja georreferenciada de alguma forma? Qual sistema de referência de coordenadas é declarado nos metadados? Muito provavelmente, você só precisa corrigir as configurações de CRS e a camada será alinhada.
underdark
obrigado pelo comentário! sim, é georreferenciada e o sistema de coordenadas é o correto (zona WGS 84 / UTM 32N) .. infelizmente o deslocamento vem de um plug-in (mal escrito) que eu preciso usar e que não posso alterar / corrigir .. daí a necessidade de reposicionar a camada ...
O plug-in Affine Transform é apenas para camadas vetoriais.
precisa saber é

Respostas:

9

ah! Eu consegui fazê-lo, seguindo o que foi dito na discussão vinculada .... ( Como traduzir (reposicionar) uma varredura em Python? ) Aparentemente, demorei um pouco para descobrir como usar o console python! ;) Obrigado de qualquer forma! :)

Eu usei GDAL / Python, no console QGIS Python! :)

o que eu escrevi foi:

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

maria
fonte
Há um erro de digitação de uma letra no código: gdall.AllRegister não deve ser escrito com dois "L". (Ele gera: "'gdall' não está definido") Infelizmente, não posso editá-lo, pois é necessário que a edição tenha pelo menos 6 caracteres.
Smerla #
Esta resposta realmente me ajudou! A única coisa que gostaria de adicionar é verificar e verificar suas unidades antes de fazer uma transformação digitando uma print(gtl)função. Por exemplo, minha varredura estava em dd mm ss e, para descobrir quantos metros estão em um grau decimal, usei a tabela disponível aqui (mais fácil para latitude do que longitude!): Tabela para converter metros para graus decimais
Justin Kray
1

O Rasmoverplugin deve fazer o que você deseja.

Você precisa permitir que plugins experimentais o obtenham na lista de plugins.

O resultado é um arquivo raster virtual, que você pode editar com um editor de texto para ajustar os parâmetros, se necessário.

AndreJ
fonte
Não foi possível encontrá-lo ... talvez não esteja disponível para 3,6?
foobarbecue
11
O plug-in pode ser encontrado em github.com/geodrinx/rasmover , mas nenhuma atividade recente. Consulte osgeo-org.1560.x6.nabble.com/… e gis.stackexchange.com/questions/274074/… . Talvez o plugin Rasterbender possa substituí-lo.
11119 AndreJ
0

No caso especial em que a varredura já possui uma projeção UTM e você deseja movê-la longitudinalmente para outra zona UTM, descobri que gdal_translatepode fazê-lo. Por exemplo, a varredura de entrada está em qualquer zona UTM Z e você deseja movê-la para a zona UTM 26 (ou seja, o Oceano Atlântico na maioria das latitudes):

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

As coordenadas de origem e canto nas unidades espaciais do modelo, conforme relatadas, gdalinfopermanecem as mesmas. Mas o canto é coordenado na mudança de latitude / longitude, e a varredura realmente se mudou para outra parte do mundo.

Mike Finch
fonte