【发布时间】:2020-08-07 19:34:33
【问题描述】:
我有三个矩阵:第一个是经度点矩阵,第二个是纬度点矩阵,第三个是空气质量值矩阵,在每个纬度和经度上测量。在 R 中,我想将所有这些组合成一个栅格。在here 的讨论之后,并使用下面的虚构数据,我认为我可以通过这种方式组合矩阵:
mat.lat=matrix(rep(41:50,10),10)
mat.long=matrix(rep(91:100,10),10)
mat.aq=matrix(rnorm(100),10)
r=raster(mat.aq,
xmn=min(mat.long),
xmx=max(mat.long),
ymn=min(mat.lat),
ymx=max(mat.lat)
)
但是,当我绘制数据时,它们有点偏离。我怀疑这是因为我的数据实际上比合成数据中的数据更复杂,并且实际的经纬度网格不是均匀分布的,而均匀分布是 raster 命令所期望的。
但我觉得必须有一种更聪明的方法来组合矩阵,而不仅仅是沿着最小和最大纬度和经度值进行耕作。我实际上有纬度/经度的值,所以我不想插入它们。但经过大量搜索,我无法弄清楚如何。 This 问题接近了,发帖人找到了解决我的问题的解决方案。
如何将两个经纬度矩阵与一个数据点矩阵叠加到一个栅格(或其他空间数据框)中?
作为背景,我从一位同事那里收到了两个 netcdf 文件:一个带有覆盖我们感兴趣区域的纬度和经度点网格。在第一个 netcdf 文件中,纬度和经度是变量,而不是维度。第二个 netcdf 文件包含我们感兴趣的数据,但没有纬度或经度。我想在 R 中映射这些文件中的数据,但是用于读取 netcdf 文件的标准函数假定 netcdf 文件的维度已经具有纬度和经度。 在讨论here 之后,我认为我可以提取三个信息数组,并将它们重新分层,但我很难做到这一点。 修订版 我找到了一种方法来做到这一点,虽然我确信这是一种可怕的、令人尴尬的低效剥猫皮的方法,我分享一下,以防其他人在谷歌上偶然发现这个页面。
pts=cbind(lon=as.vector(mat.lon),
lat=as.vector(mat.lat),
aq=as.vector(mat.aq))
inter1=data.frame(pts)
inter1 <- cbind(inter1,
cat = rep(1L, nrow(inter1)),
stringsAsFactors = FALSE)
#convert to spatial points
coordinates(inter1) = ~lon + lat
proj4string(inter1)<-CRS("+init=epsg:4269")
r.grid <- raster(inter1,crs=CRS("+init=epsg:4269"),
nrows=315,
ncols=288)
r=rasterize(x=pts[,1:2],y=r,field=pts[,3])
【问题讨论】:
标签: r geospatial raster netcdf