如何使用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
相关产品推荐
相关产品推荐

