Регриддинг, наджинг, интерполяция растра в растр.

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Jasen » 11 июл 2018, 11:18

Всем снова добрый день!
Задача состоит в следующем:
Даны результаты расчета двух моделей, каждая на поверхности Земли имеет регулярную сетку. Шаг сетки модели 2 меньше, чем у модели 1.
Требуется получить (проинтерполировать) значения модели 1 в узлы сетки модели 2. Конечно же с минимальными искажениями. Проекции у моделей тоже разные. Но даже если перепроецировать одну в другую, сетки будут лежать друг относительно друга как показано на рисунке.
Итак, значения в зеленых узлах нужно проинтерполировать в красные узлы. Существует ли способ лучше, чем перевод одной из сеток в вектор и использование инструментов интерполяции растра в векторные точки?
Изначально формат файлов GRIB, netCDF.
Вложения
IMG_20180711_110347.jpg
IMG_20180711_110347.jpg (392.68 КБ) 8641 просмотр
Что написал - то написал!

Skywalker
Участник
Сообщения: 79
Зарегистрирован: 01 май 2013, 22:38
Репутация: 30
Откуда: Сыктывкар

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Skywalker » 11 июл 2018, 12:01

В горном софте есть такая процедура – «Опустить точки на поверхность». Построить по регулярной сетке MODEL1 поверхность. «Опустить точки» модели MODEL2 на эту поверхность, т.е. присвоить им значение атрибута Z.

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 546
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 532
Откуда: Planet Earth
Контактная информация:

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Эдуард Казаков » 11 июл 2018, 12:30

Конечно, задача стандартная. По сути, вам нужно одно изображение трансформировать в пространственный домен другого. Пространственный домен это не только проекция, это:
1. Проекция - более общо скажем "система координат"
2. Границы сетки (xmin, ymin, xmax, ymax)
3. Размер ячейки (пространственное разрешение)

Так мы однозначно определяем (если опустить поворот, которого в 99% случаев нет) пространство нашей "сетки".

Решение на python для python gdal
https://github.com/silenteddie/RasterAdjuster

Просто через консольный gdal это делается тоже просто, gdal_warp:
gdalwarp -te <xmin ymin xmax ymax> -s_srs <проекция второго растра> -t_srs <проекция первого растра> -tr <размер ячейки по X, размер ячейки по Y> <второй растр> <трансформированный растр>

Таким образом приведем второй растр к первому.
xmin ymin xmax ymax и размеры ячейки должны совпадать с таковыми у первого растра. Можно посмотреть через gdalinfo.

Типом интерполяции можно управлять через ключ -r, там много, посмотрите здесь:
http://www.gdal.org/gdalwarp.html

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение gamm » 12 июл 2018, 11:55

если это модель, то лучше интерполировать с точек, поскольку интерполяция растра в растр - штука довольно специфическая и в данном случае не очень пригодная. Исходную сетку лучше перевести в XYZ, поменять проекцию, и использовать интерполятор на целевую сетку в SAGA, там методов хватает.

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Jasen » 17 июл 2018, 12:48

Да, я тоже думаю о конвертации, потому что

Код: Выделить всё

gdalwarp -te -311874.01519 -1695484.48086 222125.98481 -1161484.48086 -s_srs gfs.t00z.pgrb2.0p25.prj -t_srs "+proj=lcc +lat_1=60 +lat_2=47.5 +lat_0=60 +lon_0=41.3 +x_0=0 +y_0=0 +a=6367470 +b=6367470 +units=m +no_defs" -te_srs "+proj=lcc +lat_1=60 +lat_2=47.5 +lat_0=60 +lon_0=41.3 +x_0=0 +y_0=0 +a=6367470 +b=6367470 +units=m +no_defs" -tr 18000 -18000 -of netCDF gfs.t00z.pgrb2.0p25.grb wrfgfs1.nc -r bilinear -overwrite
у меня дало желаемый результат, но работало очень долго.
А при gdal_translate в xyz не будет потерь точности?
Что написал - то написал!

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Jasen » 17 июл 2018, 22:16

Вторая попытка сделать то же самое (будем называть это "алгоритм 1" - из растра в растр. Ошибки привожу в картинках.
Растр явно не записался, хотя привязка правильная, хоть и не совсем совпадают, как в первом тесте.
"алгоритм 2" - предложенный gamm будет опробован завтра, когда я пойму как записывать SET в cmd.
Вложения
overflow1.PNG
это то что произошло с данными
overflow1.PNG (20.27 КБ) 8440 просмотров
overflow.PNG
это команда и ответ
overflow.PNG (9.68 КБ) 8440 просмотров
Что написал - то написал!

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 546
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 532
Откуда: Planet Earth
Контактная информация:

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Эдуард Казаков » 18 июл 2018, 09:40

А попробуйте добавить в команду параметры:
-wo SAMPLE_GRID=YES -wo SAMPLE_STEPS=1000

Аватара пользователя
Jasen
Активный участник
Сообщения: 100
Зарегистрирован: 27 янв 2006, 18:33
Репутация: 4
Ваше звание: Специалист
Откуда: Москва
Контактная информация:

Re: Регриддинг, наджинг, интерполяция растра в растр.

Сообщение Jasen » 18 июл 2018, 13:03

Эдуард Казаков писал(а):
18 июл 2018, 09:40
-wo SAMPLE_GRID=YES -wo SAMPLE_STEPS=1000
Привело к аналогичному результату.
https://lists.osgeo.org/pipermail/gdal- ... 37659.html тут кажется об этом.
Видимо, нужно обрезать большой растр сначала. вот только как получить маску обрезки.
Что написал - то написал!

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей