如何在R语言中按纬度筛选sf数据框,移除南纬26°以南的多边形
实现方法:创建不含南纬26°以南区域的SF数据框
针对你的需求,我们可以通过创建裁剪边界+空间交集运算来保留原多边形中南纬26°(纬度 > -26)以北的部分,具体步骤如下:
步骤1:创建裁剪边界
首先定义一个覆盖南纬26°以北的矩形多边形,范围需足够覆盖原数据的经度区间,确保能完整裁剪目标区域:
library(sf) # 创建南纬26°以北的裁剪边界(与原数据同CRS:EPSG:4674) clip_box <- st_polygon(list( matrix( c(-180, -26, # 左下角:西经180,南纬26 180, -26, # 右下角:东经180,南纬26 180, 90, # 右上角:东经180,北纬90 -180, 90, # 左上角:西经180,北纬90 -180, -26), # 回到起点 ncol = 2, byrow = TRUE ) )) %>% st_sfc(crs = st_crs(geodata)) %>% # 匹配原数据的坐标系 st_sf()
步骤2:执行空间裁剪
使用st_intersection()函数,将原SF数据与裁剪边界做交集运算,保留每个多边形在南纬26°以北的部分:
# 执行裁剪,得到新的SF数据框 geodata_clipped <- st_intersection(geodata, clip_box)
步骤3:清理空几何体(可选)
如果原多边形完全在南纬26°以南,裁剪后会产生空几何体,可通过以下代码移除:
# 过滤掉空几何体 geodata_clipped <- geodata_clipped[!st_is_empty(geodata_clipped), ]
验证结果
用ggplot可视化验证裁剪效果:
library(ggplot2) ggplot() + geom_sf(data = geodata, fill = "gray", alpha = 0.3) + # 原数据半透明显示 geom_sf(data = geodata_clipped, aes(fill = factor(id))) + # 裁剪后的数据 geom_sf(data = clip_box, fill = NA, color = "red", linetype = "dashed") # 裁剪边界线
代码说明
st_polygon():手动构建裁剪用的矩形边界,确保覆盖所有需要保留的区域st_intersection():核心空间运算,保留两个图层的重叠部分,精准实现“切掉南纬26°以南区域”的需求st_is_empty():判断并移除裁剪后可能产生的空几何体,避免后续分析报错
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

