Как перевести (переместить) растровый слой .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Плагин должен делать то , что вы хотите.

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

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

Andrej
источник
Не могу найти это ... может быть недоступно для 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остаются неизменными. Но координаты угла по широте / долготе меняются, и растр действительно перемещается в другую часть мира.

Майк Финч
источник