You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言sf包统计网格内点数并生成含该信息的Shapefile的技术问询

使用R语言sf包统计网格内点数并生成含该信息的Shapefile的技术问询

嗨,我来帮你搞定这个问题!你已经完成了韩国行政区网格和点数据的准备工作,接下来要统计每个网格内的点数并导出带该信息的Shapefile,其实用st_join配合聚合操作就能解决,大概率是之前的用法没到位,下面给你一步步的解决方案:

步骤1:关联点与网格

首先我们需要把每个点匹配到对应的网格里,这里要用st_join并指定join = st_contains(判断点是否被网格包含),这样每个点会关联到它所在的网格:

# 将点数据关联到对应的网格
grid_point_join <- st_join(grid, point, join = st_contains)

步骤2:统计每个网格的点数

关联完成后,我们按网格的几何形状分组,统计每组的行数(也就是该网格内的点数):

# 统计每个网格内的点数
grid_with_count <- grid_point_join %>%
  group_by(geometry) %>%
  summarise(point_count = n(), .groups = "drop")

步骤3:补全无点网格的计数

上面的统计会漏掉没有点的网格,我们需要把原始网格和统计结果做左连接,将空网格的点数设为0:

# 确保所有网格都被保留,无点网格计数为0
grid_final <- grid %>%
  left_join(grid_with_count, by = "geometry") %>%
  mutate(point_count = ifelse(is.na(point_count), 0, point_count))

步骤4:导出为Shapefile

最后用sf包的st_write函数导出带点数信息的Shapefile:

# 导出Shapefile,可自行修改路径和文件名
st_write(grid_final, "./grid_with_point_counts.shp", delete_layer = TRUE)

额外提示

  • 确保你的sf包是最新版本,旧版本可能在空间连接或聚合操作上存在bug;
  • 如果点数据存在重复或无效记录,建议先通过distinct()或过滤条件清理数据再统计;
  • 若点刚好落在网格边界上,st_contains可能不会匹配,这时可以换成st_intersects来处理边界点。

备注:内容来源于stack exchange,提问作者ChanToRe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:23:04