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

如何在R中裁剪栅格至Shapefile并保留完整网格单元?

R语言保留完整六边形网格单元的解决方案

核心逻辑

你需要的不是对网格几何进行切割,而是筛选出符合空间关系的完整网格单元——这和QGIS中"提取完整要素"的逻辑一致,而非几何裁剪操作。常用判断逻辑分为以下几种,可按需选择:

具体实现步骤

首先确保用sf包读取并对齐坐标系:

library(sf)
# 读取Shapefile文件
hex_grid <- st_read("你的六边形网格文件路径.shp")
boundary <- st_read("你的边界面文件路径.shp")

# 统一坐标系(若不一致则转换)
if (!st_crs(hex_grid) == st_crs(boundary)) {
  hex_grid <- st_transform(hex_grid, st_crs(boundary))
}

方法1:筛选完全被边界包含的网格

适合严格要求网格完全在边界内的场景:

# 判断每个网格是否完全被边界包含
is_inside <- st_within(hex_grid, boundary, sparse = FALSE)[,1]
# 提取完整网格
filtered_hex <- hex_grid[is_inside, ]

方法2:筛选中心点在边界内的网格

适合快速筛选(和QGIS中常用的近似提取逻辑一致):

# 生成网格中心点
hex_centroids <- st_centroid(hex_grid)
# 判断中心点是否在边界内
centroid_in_bound <- st_within(hex_centroids, boundary, sparse = FALSE)[,1]
# 提取完整网格
filtered_hex <- hex_grid[centroid_in_bound, ]

方法3:筛选所有与边界相交的网格

保留所有和边界有交集的完整网格(无论是否完全包含):

# 判断网格是否与边界相交
is_intersect <- st_intersects(hex_grid, boundary, sparse = FALSE)[,1]
# 提取完整网格
filtered_hex <- hex_grid[is_intersect, ]

结果验证与导出

# 可视化验证
plot(st_geometry(filtered_hex), col = "#4CAF50")
plot(st_geometry(boundary), add = TRUE, border = "red", lwd = 2)

# 导出筛选后的Shapefile
st_write(filtered_hex, "筛选后的完整六边形网格.shp")

内容的提问来源于stack exchange,提问作者Grant Rogers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:20:30