R: NetCDF->растр->получение значений в нерегулярной сетке

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

R: NetCDF->растр->получение значений в нерегулярной сетке

Сообщение nickleb » 22 мар 2015, 15:30

Здравствуйте.
Кто-нибудь решал в R Cran следующую задачу:
регулярный по Latitude/Longitude NetCDF-файл
перевести в растр и по этому растру
получить значения в узлах нерегулярной сетки. (?)
Поделитесь опытом, пожалуйста.
Последний раз редактировалось nickleb 02 июн 2015, 09:42, всего редактировалось 1 раз.

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

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение gamm » 22 мар 2015, 16:09

nickleb писал(а):Здравствуйте.
Кто-нибудь решал в R Cran следующую задачу:
регулярный по Latitude/Longitude NetCDF-файл
перевести в растр и по этому растру
получить значения в узлах нерегулярной сетки. (?)
Поделитесь опытом, пожалуйста.
кто-нибудь решал

1) Интерполировать в Lon/Lat нельзя, переводим точки в какую-нибудь равнопромежуточную проекцию

2) Интерполируем в узлы прямоугольной регулярной сетки (это растр, но в табличном виде). Границы берем с запасом, чтобы целевая область уместилось. Интерполируем сплайнами из пакета MBA
Сетку строим так

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

grid.XX<_grid.X0+grid.nX*grid.dX
grid.YY<_grid.Y0+grid.nY*grid.dY
grid.XY<-expand.grid(grid.XX,grid.YY)
3) Для каждого целевого (X,Y) в той же проекции находим номер строки и столбца, делаем это векторными операциями, а не циклом, типа

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

col<-floor((target$X-grid.X0)/grid.dX)
row<-floor((target$Y-grid.Y0)/grid.dY)
потом находим смещение от угла

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

rX<-target$X-(grid.X0+grid.dX*col)
rY<-target$Y-(grid.Y0+grid.dY*col)
и используем билинейную интерполяцию значений в углах

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

Z10<-(row+1-1)*grid.nX+col    Z11<-(row+1-1)*grid.nX+col+1

Z00<-(row-1)*grid.nX+col        Z01<-(row-1)*grid.nX+col+1
... непонятно только, зачем переводить в растр :roll:

проще прямо в пункте (2) интерполировать на целевую сетку, что резко сокращает объем работы :mrgreen:

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение nickleb » 22 мар 2015, 16:39

... спасибо-спасибо, gamm! захотелось сразу в привычный старый Surfer: пересчитать в Ламберта Азимутальную, kriging'овать в регулярку, и от-slice'-овать по полученному grid'у в иррегулярку .. но Surfer старый и NеtCDF не грузит... по R: вашу технологическую линеечку посмотрю-изучу...

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение nickleb » 24 мар 2015, 07:31

gamm писал(а):
nickleb писал(а): 2) Интерполируем в узлы прямоугольной регулярной сетки (это растр, но в табличном виде). Границы берем с запасом, чтобы целевая область уместилось. Интерполируем сплайнами из пакета MBA
Сетку строим так

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

grid.XX<_grid.X0+grid.nX*grid.dX
grid.YY<_grid.Y0+grid.nY*grid.dY
grid.XY<-expand.grid(grid.XX,grid.YY)
[/code]
Достопочтимый gamm, доброе утро! А в R Вы чем и как Kriging'уете?

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

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение gamm » 24 мар 2015, 12:28

Что-то мне подсказывает, что в surfer вы никакой вариограммы не строили, а использовали линейную вариограмму по умолчанию. Т.е. строили сплайн. Поэтому не мудрите, и используте MBA, это тоже сплайны, очень быстрые.

[ Сообщение с мобильного устройства ]

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение nickleb » 24 мар 2015, 14:44

gamm писал(а):Что-то мне подсказывает, что в surfer вы никакой вариограммы не строили, а использовали линейную вариограмму по умолчанию. Т.е. строили сплайн. Поэтому не мудрите, и используте MBA, это тоже сплайны, очень быстрые.

[ Сообщение с мобильного устройства ]
Поля у меня исходные происхождения модельного... Мне только значения для узлов своей сетки получить... Что-ж, по-э-R-ю по Вашей схеме..

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение nickleb » 13 апр 2015, 18:30

gamm писал(а):
nickleb писал(а):
Интерполируем сплайнами из пакета MBA
Уважаемый gamm, а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?

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

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение gamm » 13 апр 2015, 18:55

nickleb писал(а):а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?
ничего не понял - ни что есть на входе, ни что нужно получить на выходе ... NetCDF - сетка, изолиний там нет; и непонятно, к чему относится "многоуровневый"; и что на выходе нужно - сетку? нужны структуры данных, а не форма представления (ASCII)

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение nickleb » 13 апр 2015, 19:16

gamm писал(а):
nickleb писал(а):а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?
ничего не понял - ни что есть на входе, ни что нужно получить на выходе ... NetCDF - сетка, изолиний там нет; и непонятно, к чему относится "многоуровневый"; и что на выходе нужно - сетку? нужны структуры данных, а не форма представления (ASCII)
на входе NetCDF с Temp[Lat/Lon/Depth/] в географии... надо получить глубину изотермы ноль градусов по этому параллелепипеду в задаваемом наборе точек с отличными от исходного набора Lat/Lon-координатами...

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

Re: R: NetCDF->растр->получение значений в нерегулярной сетк

Сообщение gamm » 13 апр 2015, 20:40

nickleb писал(а):на входе NetCDF с Temp[Lat/Lon/Depth/] в географии... надо получить глубину изотермы ноль градусов по этому параллелепипеду в задаваемом наборе точек с отличными от исходного набора Lat/Lon-координатами...
1) насколько я понял, есть 3D сетка со значениями температуры
2) получаем отметки в вертикальных столбцах: грузим столбец (или несколько, и ли все, если влазит), и для каждого столбца находим глубину нуля (используем approx(), взяв x=T, y=depth, xout=0 - я предполагаю, что там монотонность, иначе просто перебором)
3) имеем точкb (Lon,Lat,depth), которые пересчитываем в какую-нибудь равнопромежуточную проекцию, которая не сбоит в ваших широтах, получаем набор (Xprj,Yprj,depth)
4) переводим целевые координаты в ту же проекцию, и интерполируем на них, используя "точечный" вариант МВА
5) profit :mrgreen:

Ответить

Вернуться в «R»

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

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