R 中的地理空间数据:我有一个纬度矩阵、一个经度矩阵和一个值矩阵——如何组合?

Geospatial data in R: I have a matrix of latitudes, a matrix of longitudes, and a matrix of values-how combine?

我有三个矩阵:第一个是经度点矩阵,第二个是纬度点矩阵,第三个是在每个纬度和经度测量的空气质量值矩阵。在 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)
)

然而,当我绘制数据时,它们有点 off。我怀疑这是因为我的数据实际上比合成数据中的数据更复杂,并且实际的纬度和经度网格不是均匀分布的,均匀分布是栅格命令所期望的。

但我觉得必须有一种更聪明的方法来组合矩阵,而不是仅仅沿着最小和最大纬度和经度值耕作。我实际上有 lat/lon 的值,所以我不想对它们进行插值。但是经过大量搜索,我无法弄清楚如何。 This 问题接近尾声,发布者找到了解决他们问题的方法,但我的问题没有解决。

如何将两个纬度和经度矩阵与一个数据点矩阵叠加到栅格(或其他空间数据框)中?

作为背景,我从一位同事那里收到了两个 netcdf 文件:一个包含覆盖我们感兴趣区域的纬度和经度点网格。在第一个 netcdf 文件中,纬度和经度是变量,而不是维度。第二个 netcdf 文件包含我们感兴趣的数据,但没有纬度或经度。我想在 R 中映射这些文件中的数据,但是读取 netcdf 文件的标准函数假定 netcdf 文件的维度已经具有纬度和经度。 在讨论 here 之后,我想我可以提取三个信息数组,然后将它们重新组合在一起,但我很难做到这一点。 修订 我找到了一种方法,虽然我确信这是一种可怕的、令人尴尬的低效剥猫皮方法,但我还是分享一下,以防其他人 google- 偶然发现此页面。

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])

我将从使用 提供的尺寸开始。大概是在不同的空间参考系中的坐标?将这些作为栅格后,您可以使用 projectRaster 转换为 lon/lat。

如果数据不在规则的网格上,则将数据视为点。你可以这样做

mlat=matrix(rep(41:50,10),10)
mlong=matrix(rep(91:100,10),10, byrow=TRUE)
maq=matrix(rnorm(100),10)

pts <- cbind(lat=as.vector(mlat), lon=as.vector(mlong), aq=as.vector(maq))

如果数据位于规则网格上(如示例数据中所示),您可以

library(raster)
r <- rasterFromXYZ(pts)
plot(r)

如果它们不是,并且您确实希望它们位于规则网格上,则需要进行插值。请参见 ?raster::interpolate