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

在R中判断坐标点是否位于Shapefile多边形内的方法求助

解决方法

要判断点是否在多边形Shapefile内,核心是先把普通数据框转成sf空间点对象,再确保坐标系和多边形一致,最后用空间包含判断函数实现。以下是完整步骤:

1. 加载所需包并转换为空间对象

先确保已安装并加载sf包,再将你的数据框转为sf点对象,直接复用多边形的坐标系(避免坐标系不匹配导致的操作失败,这是空间分析常见问题):

library(sf)

# 将普通数据框转为sf点对象,复用多边形的坐标系
df_sf <- st_as_sf(df, coords = c("lon", "lat"), crs = st_crs(shape))

2. 判断点是否在多边形内并填充结果

使用st_within()函数判断点是否被多边形包含,将返回的列表结果转换为1/0的数值,填入目标列:

# 逐个判断点是否在多边形内,返回逻辑值
is_within <- sapply(st_within(df_sf, shape), function(x) length(x) > 0)

# 将逻辑值转为1(内部)/0(外部)并赋值
df$judge_whether_within_shp <- as.integer(is_within)

如果你的Shapefile包含多个多边形,st_within()会自动判断点是否在任意一个多边形内,符合需求。

替代方案:用st_intersects实现

如果st_within效果不佳,也可以用st_intersects(),逻辑完全一致:

is_intersect <- sapply(st_intersects(df_sf, shape), function(x) length(x) > 0)
df$judge_whether_within_shp <- as.integer(is_intersect)

关于st_join失败的说明

st_join()是空间连接工具,默认会把多边形属性合并到点数据中,点不在多边形内时对应属性为NA。你也可以用这个特性间接判断,但需要额外处理NA值,不如直接用st_within直观:

# 空间连接,保留所有点
joined <- st_join(df_sf, shape, left = TRUE)
# 根据是否存在多边形属性判断,转为1/0
df$judge_whether_within_shp <- as.integer(!is.na(joined[[names(shape)[1]]]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:32:48