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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:04:52