Как перевести (переместить) растровый слой .tif?


10

Я начинаю использовать QGIS для своей диссертации (физика окружающей среды) и должен признать, что я совершенно не осведомлен об этом - я всегда использовал Mathematica или Matlab.

Моя проблема: у меня есть растровый слой в формате .tif, который не на своем месте (мне нужно переместить его на юг и запад на 100 м). Мне нужно перевести (переместить) это, и я абсолютно не знаю, как я могу это сделать.

Я пробовал аффинное преобразование, но оно не работает (не позволяет мне выбрать входной слой); Я также читал это Как перевести (переместить) растр в Python? но я должен признать, что я не очень много понял, я пробовал несколько раз, но не очень хорошо с Python.


Я предполагаю, что слой .tif имеет географическую привязку каким-либо образом? Какая система координат указывается в метаданных? Вполне вероятно, вам нужно только исправить настройки CRS, и слой будет выровнен.
Подземье

Спасибо за комментарий! да, это географическая привязка, и система координат является правильной (WGS 84 / UTM zone 32N) .. к сожалению, смещение происходит из-за (плохо написанного) плагина, который мне нужно использовать, и который я не могу изменить / исправить .. следовательно, необходимо изменить положение слоя ...

Плагин Affine Transform предназначен только для векторных слоев.
AndreJ

Ответы:


9

ах! Мне удалось это сделать, следуя тому, что было сказано в связанном обсуждении .... ( Как перевести (переместить) растр в Python? ) Очевидно, мне потребовалось некоторое время, чтобы понять, как использовать консоль Python! ;) в любом случае спасибо! :)

Я использовал GDAL / Python из консоли QGIS Python! :)

что я написал было:

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

РЕДАКТИРОВАТЬ: переключил "gdall.AllRegister ()" на "gdal.AllRegister ()".


В коде присутствует однобуквенная опечатка: gdall.AllRegister не должен быть написан с двумя "L". (Он генерирует: «gdall не определен»). К сожалению, я не могу его редактировать, так как для редактирования требуется длина не менее 6 символов.
Смерла

Этот ответ действительно помог мне! Единственное, что я хотел бы добавить, это проверить и проверить ваши единицы перед выполнением преобразования, введя print(gtl)функцию. Например, мой растр был в dd mm ss, и поэтому, чтобы выяснить, сколько метров в десятичном градусе, я использовал доступную здесь таблицу (проще для широты, чем долготы!): Таблица для преобразования метров в десятичные градусы
Джастин Крей

1

RasmoverПлагин должен делать то , что вы хотите.

Вы должны разрешить экспериментальные плагины, чтобы получить его в списке плагинов.

В результате получается виртуальный растровый файл, который можно редактировать с помощью текстового редактора, чтобы при необходимости настроить параметры.


Не могу найти это ... может быть недоступно для 3.6?
foo barbecue

1
Плагин можно найти по адресу github.com/geodrinx/rasmover , но в последнее время нет активности. См. Osgeo-org.1560.x6.nabble.com/… и gis.stackexchange.com/questions/274074/… . Возможно, плагин Rasterbender может заменить его.
AndreJ

0

В особом случае, когда растр уже имеет проекцию UTM, и вы хотите переместить его в продольном направлении в другую зону UTM, я обнаружил, что это gdal_translateможно сделать. Например, входной растр находится в любой зоне Z UTM, и вы хотите переместить его в зону 26 UTM (то есть в Атлантический океан в большинстве широт):

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

Исходные и угловые координаты в единицах пространства модели, о которых сообщается, gdalinfoостаются неизменными. Но координаты угла по широте / долготе меняются, и растр действительно перемещается в другую часть мира.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.