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

R中如何提取data frame中落在手绘多边形内的空间数据子集

R语言提取手绘多边形内点位数据的实现方案

方案1:使用已加载的splancs包(无需额外安装依赖)

你已经加载了splancs包,直接用包内自带的inpip函数即可完成筛选,该函数专门用于判断点是否落在多边形内部:

# 1. 提取数据框中的坐标列,将下方的"x"、"y"替换为你实际的坐标列名
points_xy <- as.matrix(df[, c("x", "y")])
# 2. 获取所有落在多边形内部的点的行索引
inside_idx <- inpip(points_xy, polygon_xy)
# 3. 子集化得到仅包含多边形内点位的结果
df_inside <- df[inside_idx, ]

如果需要包含多边形边界上的点位,可以替换为splancs包的inout函数实现:

inside_idx <- which(inout(points_xy, polygon_xy, bound = TRUE))
df_inside <- df[inside_idx, ]

你可以通过绘图快速验证筛选结果是否正确:

# 绘制所有点位(灰色)
plot(df$x, df$y, col = "gray", pch = 16)
# 绘制手绘研究区域(红色边框)
polygon(polygon_xy, border = "red", lwd = 2)
# 绘制筛选后的内部点位(蓝色)
points(df_inside$x, df_inside$y, col = "blue", pch = 16)

方案2:使用sf包做规范空间操作

如果你后续还要做更多空间分析,推荐用空间数据专用的sf包实现,逻辑更清晰也兼容更多空间操作:

library(sf)
# 1. 将普通数据框转为空间点位对象,crs参数填写你数据对应的坐标系,无投影可填NA
df_sf <- st_as_sf(df, coords = c("x", "y"), crs = NA)
# 2. 将手绘多边形坐标转为空间多边形对象
poly_sf <- st_polygon(list(rbind(polygon_xy, polygon_xy[1,]))) %>% 
  st_sfc(crs = NA)
# 3. 筛选与多边形相交的点位
df_inside_sf <- df_sf[st_intersects(df_sf, poly_sf, sparse = FALSE), ]
# 可选:去除空间列,转回普通数据框
df_inside <- st_drop_geometry(df_inside_sf)

注意事项

  • 需保证数据框中的坐标列、之前绘图用的坐标、getpoly拾取的坐标三者的范围、坐标系完全一致,否则会出现筛选错误
  • 若手绘多边形存在自相交的情况,建议重新绘制规整的多边形,避免筛选结果异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:03