Як перекласти (репозицію) растровий шар .tif?


10

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

Моя проблема полягає в тому, що у мене є растровий шар у форматі .tif, який не розміщений (мені потрібно перемістити його на південь та захід на 100 м). Мені потрібно перекласти (репозицію), і я абсолютно не маю уявлення про те, як це зробити.

Я спробував перетворення Affine, але воно не працює (не дозволяє мені вибрати вхідний шар); Я також читав це Як перекласти (репозицію) растра на Python? але я мушу визнати, що я мало що це зрозумів, я спробував кілька разів, але не дуже добре з python.


Я припускаю, що шар .tif певним чином є геореференційним? Яка система відліку координат вказана у метаданих? Цілком ймовірно, вам потрібно лише виправити настройки CRS і шар вирівняється.
underdark

дякую за коментар! так, це геореференція, і система координат є правильною (WGS 84 / UTM зона 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

EDIT: переключено "gdall.AllRegister ()" на "gdal.AllRegister ()".


У коді є друкарська помилка з однією буквою: gdall.AllRegister не повинна писатися двома "L". (Це покоління: "gdall" не визначено ") На жаль, я не можу редагувати його, оскільки правка повинна бути довжиною принаймні 6 символів.
Смерла

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

1

RasmoverПлагін повинен робити те , що ви хочете.

Ви повинні дозволити для експериментальних плагінів потрапити в список плагінів.

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


Не вдалося знайти ... можливо, недоступний для 3.6?
foobarbecue

1
Плагін можна знайти на веб- сайті github.com/geodrinx/rasmover , але останніх заходів немає. Дивіться osgeo-org.1560.x6.nabble.com/… та gis.stackexchange.com/questions/274074/… . Можливо, плагін Rasterbender може замінити його.
AndreJ

0

У спеціальному випадку, коли растр вже має проекцію UTM, і ви хочете перемістити його поздовжньо до іншої зони UTM, я виявив, що це gdal_translateможе зробити. Наприклад, вхідний растр знаходиться в будь-якій зоні UTM Z, і ви хочете перемістити його в зону 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.