R - 将点转换为 30 x 30m 栅格中心的点

R - Convert points into points in the centre of raster of 30 x 30m

我想将特定的空间点数据集转换为栅格中心的点。 结果应该是空间点,对于原始数据集中的每个点,栅格中心的一个点。

我编写此示例代码是为了更好地了解任务。

library(raster)
library(plyr)
library(ggplot2)
library(viridis)

setwd("C:/Users/chris/Desktop/Regionaler Klimawandel und Gesundheit/Urban COPD/R/Data/")
getwd()

set.seed(55)

r <- raster(xmn= 800000, 
            xmx= 810000,
            ymn= 7200000,
            ymx= 7210000)
p <- as(r@extent, 'SpatialPolygons')
pts <- spsample(p, n = 100, "random")
pts$value <- runif(100, min=0, max=10)
df <- as.data.frame(pts)

ggplot(data= df, aes(x, y, fill =value))+
  geom_point(shape = 21, size = 2)+
  scale_fill_viridis()+
  theme_minimal()

谢谢大家!

如果我没理解错的话,您希望 values 列与 raster 对象 r.

中 x、y 处的网格点相关联

既然如此,您可以在上面的代码中添加以下行:

r <- rasterize(cbind(df$x, df$y), r, df$value, fun = mean)

所以现在 r 看起来像这样:

r
#> class      : RasterLayer 
#> dimensions : 180, 360, 64800  (nrow, ncol, ncell)
#> resolution : 27.77778, 55.55556  (x, y)
#> extent     : 8e+05, 810000, 7200000, 7210000  (xmin, xmax, ymin, ymax)
#> crs        : NA 
#> source     : memory
#> names      : layer 
#> values     : 0.08473639, 9.896253  (min, max)

plot(r)

请注意,由于光栅的分辨率,您必须仔细观察才能看到这些点。

如果降低初始光栅的分辨率,通过将 r 创建为:

r <- raster(xmn= 800000, 
            xmx= 810000,
            ymn= 7200000,
            ymx= 7210000,
            ncols = 50, nrows = 50)

然后您可以更清楚地看到这些点,并注意它们与您 ggplot:

上的点相匹配
r <- rasterize(cbind(df$x, df$y), r, df$value, fun = mean)

plot(r)

reprex package (v2.0.0)

于 2021-11-03 创建