可能这是一个新手问题,但我搜索了一段时间,不幸的是我找不到任何适合我的问题的东西。我想在一个更精细的不规则网格到一个更粗糙的不规则网格之间进行空间插值。
问题: 我有更精细网格(1km网格分辨率)的经度和纬度坐标(都是二维数组,100x100(不是矢量)),还有两个阵列(450x450)用于较粗网格的经度和纬度(3km网格分辨率) 。现在我想将温度和湿度从更精细的分辨率插入到更粗糙的分辨率,以比较温度和湿度曲线。较精细分辨率的区域完全填充较粗糙的区域(粗粒分辨率中约35x35网格点)。
尝试 我试图通过两种方式实现它。首先,我尝试做一种最近邻插值。我搜索了球体上最近的邻居,而不是将较细网格的值表示为较粗网格的位置。我知道这很脏又脏,但遗憾的是它提供了不切实际的结果(你在水平方向上得到条纹)。这是第一次尝试的代码:
source("~/getnearest.r")
distance <- gp_neigh <- array(NA,c(length(var_finer_rho[,1]),length(var_finer_rho[1,])))
for (i_lon in 1:length(var_finer_rho[,1])){
for (i_lat in 1:length(var_finer_rho[1,])){
distance <- get_nearest(lat_finer_res[i_lon,i_lat],lat_coarser_res,lon_finer_res[i_lon,i_lat],lon_coarser_res)
gp_neigh[i_lon,i_lat] <- which.min(distance)
}
}
finer_interp2c <- array(NA,c(40,40))
for (i_gp in min(gp_neigh):max(gp_neigh)){
finer_interp2c[i_gp] <- mean(var_finer_rho[which(gp_neigh==i_gp)])
}
在第二次尝试中,我将字段转换为常规网格,然后在akima包的帮助下插入常规网格。这似乎有效,但我不确定它是否正确。因为网格分辨率(gridres)的变化会影响结果的结果。我对常规网格数据集中的比较感到不满。
gridres1=150
gridres2=75
library("akima")
var_fin_interp=interp(lon_finer_res, lat_finer_res, var_finer_rho, xo=seq(min(lon_finer_res), max(lon_finer_res), length = gridres1),yo=seq(min(lat_finer_res), max(lat_finer_res), length = gridres1),linear = TRUE, extrap=FALSE, duplicate = "mean")
var_cor_interp=interp(lon_coarser_res, lat_coarser_res, var_coearser_rho, xo=seq(min(lon_coarser_res), max(lon_coarser_res), length = gridres2),yo=seq(min(lat_coarser_res), max(lat_coarser_res), length = gridres2),linear = TRUE, extrap=FALSE, duplicate = "mean")
loc <- make.surface.grid(list(var_cor_interp$x,var_fin_interp$y))
interp.surface(var_fin_interp, loc)-> look
问题 是否有可能从不规则场到其他不规则场进行插值,并且有人知道如何解决我的问题吗?
PS:很抱歉,我没有在代码中写出原始变量,但我没有发现将它们带到帖子中的可能性。