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

问题描述 投票:0回答:1

我有三个矩阵:第一个是经度点的矩阵,第二个是纬度点的矩阵,第三个是空气质量值的矩阵,在每个纬度和经度测量。在R中,我想把这些都组合成一个栅格。在讨论之后 此处,并使用下面的化妆数据,我想我可以用这种方式来组合矩阵。

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

然而,当我绘制数据时,它们有点... ... 关闭. 我怀疑这是因为我的数据其实比编好的数据更复杂,而且实际的经纬度网格并不是均匀分布的,而均匀分布是栅格命令所期望的。

但我觉得一定要有更聪明的方法来组合矩阵,而不是只沿着经纬度的最小值和最大值来耕耘。其实我有纬度的值,所以我不想插值。但是找了很多地方,我都想不出来怎么做。这个 问题差一点,发帖人找到了一个解决他们问题的方法,但没有解决我的问题。

如何将两个经纬度矩阵与数据点矩阵分层到一起,形成一个栅格(或其他空间数据框架)?

作为背景,我从同事那里收到了两个netcdf文件:一个是覆盖我们感兴趣的区域的经纬度点的网格。在第一个netcdf文件中,经纬度是变量,而不是尺寸。第二个netcdf文件包含了我们感兴趣的数据,但没有经纬度。我想在R中绘制这些文件中的数据,但是读取netcdf文件的标准函数假设netcdf文件的维度已经有了经纬度。此处我想我可以提取三个信息数组,然后将它们重新分层,但我很难做到这一点。修改我找到了一个方法,虽然我确信这是一个可怕的、令人尴尬的低效的剥皮方法,但我分享给大家,以防别人在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])
r geospatial raster netcdf
1个回答
0
投票

我首先会使用的维度是 提供的。大概是不同空间参考系的坐标?一旦你有了这些栅格,你就可以使用 projectRaster 来转换为lonlat。

如果数据不在一个常规的网格上,就把数据当作点来处理。你可以这样做

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

© www.soinside.com 2019 - 2024. All rights reserved.