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

如何使用R为落在polygon内的point标注所属多边形区域信息

空间点位匹配所属行政区实现方案

R 语言(sf包)实现

前置校验

两个数据都需要为sf空间对象,且坐标系完全一致,否则会出现匹配错误:

  • 校验坐标系代码:
library(sf)
# 替换为你自己的点、面sf对象名
st_crs(points_sf) == st_crs(polygons_sf)
  • 若返回FALSE,统一坐标系:
# 将点数据转换为和面数据一致的坐标系
points_sf <- st_transform(points_sf, st_crs(polygons_sf))

核心匹配代码

用空间连接直接将行政区属性关联到对应点位:

# 把「行政区名称列」替换为你面数据中存储行政区名字的实际列名
points_with_district <- st_join(
  x = points_sf,
  y = polygons_sf[, c("行政区名称列", "geom")],
  largest = TRUE # 边界点位默认匹配重叠面积最大的行政区,可按需删除
)

匹配后得到的新数据框中,新增的行政区名称列就是每个点位所属的行政区,落在所有行政区外的点位对应值为NA。

Python 语言(geopandas包)实现

前置校验

两个数据都需要为GeoDataFrame对象,且坐标系一致:

  • 校验坐标系代码:
import geopandas as gpd
# 替换为你自己的点、面GeoDataFrame对象名
points_gdf.crs == polygons_gdf.crs
  • 若不匹配,统一坐标系:
points_gdf = points_gdf.to_crs(polygons_gdf.crs)

核心匹配代码

points_with_district = gpd.sjoin(
  left_df = points_gdf,
  right_df = polygons_gdf[["行政区名称列", "geometry"]],
  how = "left", # 保留所有原始点位
  predicate = "within", # 匹配逻辑为「点在面内」
  lsuffix = "_point",
  rsuffix = "_poly"
)

匹配后行政区列会自动加入点位数据框,未匹配到的点位对应值为空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:00