R语言中将空间点转换为30×30m栅格单元中心点的实现咨询
空间点匹配对应栅格中心点实现方案(R语言)
以下实现基于你提供的示例代码扩展,可直接复用:
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) # 1. 创建示例栅格(如果已有现成栅格可直接读取,跳过这部分创建逻辑) r <- raster(xmn= 800000, xmx= 810000, ymn= 7200000, ymx= 7210000) # 设置栅格分辨率,可根据实际需求调整,单位和坐标系统一 res(r) <- 100 # 2. 生成示例点(你替换成自己的点数据集即可) p <- as(r@extent, 'SpatialPolygons') pts <- spsample(p, n = 100, "random") pts$value <- runif(100, min=0, max=10) df <- as.data.frame(pts) # -------------------核心实现逻辑------------------- # 3. 匹配每个点对应的栅格单元编号 cell_ids <- cellFromXY(r, pts) # 4. 获取每个栅格单元的中心点,spatial=TRUE直接返回空间点格式 cell_centers <- xyFromCell(r, cell_ids, spatial = TRUE) # 5. 挂载原始点的所有属性字段,避免信息丢失 cell_centers <- cbind(cell_centers, pts@data) # 可转为数据框方便后续分析 center_df <- as.data.frame(cell_centers) # --------------------------------------------------- # 可视化验证 ggplot() + geom_point(data = df, aes(x, y), shape = 1, color = "gray70", size = 3) + geom_point(data = center_df, aes(x, y, fill = value), shape = 21, size = 2) + scale_fill_viridis() + theme_minimal()
关键说明
- 如果你已有现成栅格,直接用
r <- raster("你的栅格文件路径")读取即可,会自动继承原始栅格的范围、分辨率、坐标系信息,不需要手动设置 - 输出的
cell_centers就是标准空间点格式,坐标系和输入栅格、输入点完全一致 - 若需要用sf格式处理,可通过
st_as_sf(cell_centers)直接转换
你提供的示例原始点可视化效果如下:
内容的提问来源于stack exchange,提问作者ChrissiLissi
相关产品推荐
相关产品推荐

