Страница 1 из 1
					
				R: NetCDF->растр->получение значений в нерегулярной сетке
				Добавлено: 22 мар 2015, 15:30
				 nickleb
				Здравствуйте.
Кто-нибудь решал в R Cran следующую задачу:
регулярный по Latitude/Longitude NetCDF-файл
перевести в растр и по этому растру
получить значения в узлах нерегулярной сетки. (?)
Поделитесь опытом, пожалуйста.
			 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 22 мар 2015, 16:09
				 gamm
				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
... непонятно только, зачем переводить в растр  
 
 
проще прямо в пункте (2) интерполировать на целевую сетку, что резко сокращает объем работы  

 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 22 мар 2015, 16:39
				 nickleb
				... спасибо-спасибо, gamm! захотелось сразу в привычный старый Surfer: пересчитать в Ламберта Азимутальную, kriging'овать в регулярку, и от-slice'-овать по полученному grid'у в иррегулярку ..  но Surfer старый и NеtCDF не грузит... по R: вашу технологическую линеечку посмотрю-изучу...
			 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 24 мар 2015, 07:31
				 nickleb
				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'уете?
 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 24 мар 2015, 12:28
				 gamm
				Что-то мне подсказывает, что в surfer вы никакой вариограммы не строили, а использовали линейную вариограмму по умолчанию. Т.е. строили сплайн. Поэтому не мудрите, и используте MBA, это тоже сплайны, очень быстрые.
[ Сообщение с мобильного устройства ]
			 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 24 мар 2015, 14:44
				 nickleb
				gamm писал(а):Что-то мне подсказывает, что в surfer вы никакой вариограммы не строили, а использовали линейную вариограмму по умолчанию. Т.е. строили сплайн. Поэтому не мудрите, и используте MBA, это тоже сплайны, очень быстрые.
[ Сообщение с мобильного устройства ]
Поля у меня исходные происхождения модельного... Мне только значения для  узлов своей сетки получить...  Что-ж, по-э-R-ю по Вашей схеме..
 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 13 апр 2015, 18:30
				 nickleb
				gamm писал(а):nickleb писал(а):
 Интерполируем сплайнами из пакета MBA
 
Уважаемый gamm, а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?
 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 13 апр 2015, 18:55
				 gamm
				nickleb писал(а):а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?
ничего не понял - ни что есть на входе, ни что нужно получить на выходе ... NetCDF - сетка, изолиний там нет; и непонятно, к чему относится "многоуровневый"; и что на выходе нужно - сетку? нужны структуры данных, а не форма представления (ASCII)
 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 13 апр 2015, 19:16
				 nickleb
				gamm писал(а):nickleb писал(а):а через MBА-package получить в ASCII-файл узлы проинтерполированного 3D-положение изолинии по исходному многоуровенному NetCDF возможно?
ничего не понял - ни что есть на входе, ни что нужно получить на выходе ... NetCDF - сетка, изолиний там нет; и непонятно, к чему относится "многоуровневый"; и что на выходе нужно - сетку? нужны структуры данных, а не форма представления (ASCII)
 
на входе NetCDF с Temp[Lat/Lon/Depth/] в географии... надо получить глубину  изотермы ноль градусов по этому параллелепипеду в задаваемом наборе точек с отличными от исходного набора Lat/Lon-координатами...
 
			
					
				Re: R: NetCDF->растр->получение значений в нерегулярной сетк
				Добавлено: 13 апр 2015, 20:40
				 gamm
				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  
