如何统计俄罗斯各地理细分区域内的点位数量?
统计地理细分区域内的点位数量
一、使用桌面GIS工具(以QGIS为例)
- 数据准备:先确认有两个矢量图层——俄罗斯细分区域的面图层(带区域名称/ID属性)、标注点位的点图层。如果原始是图片地图,得先矢量化:用QGIS的
Digitizing Toolbar手动绘制区域边界和点位,或用自动矢量化插件辅助完成。 - 空间连接计数:
- 打开QGIS并加载两个图层。
- 点击菜单栏「矢量」→「数据管理工具」→「连接属性(空间)」。
- 窗口中设置「输入图层」为区域面图层,「连接图层」为点位点图层。
- 连接类型选「统计连接」,勾选「计数」并指定字段名(比如
point_count)存储数量。 - 选择输出新图层,点击「运行」。
- 查看结果:新生成的面图层属性表中,
point_count字段就是对应区域内的点位数量,还可直接在地图上标注该数值。
ArcGIS操作步骤
- 加载区域面图层和点位点图层到ArcMap/ArcGIS Pro。
- 打开「分析工具」→「叠加分析」→「空间连接」。
- 目标要素选区域面图层,连接要素选点位点图层。
- 连接类型选「基于空间关系连接要素」,空间关系设为「完全包含」。
- 在「字段映射」中,对点位的任意字段设置统计类型为「计数」,输出新图层。
- 打开新图层属性表,即可查看各区域的点位计数。
二、使用Python代码(GeoPandas)
- 前置准备:安装依赖库,执行命令:
pip install geopandas shapely - 代码示例:
import geopandas as gpd # 替换为你的实际文件路径(支持Shapefile、GeoJSON等格式) regions = gpd.read_file("russia_regions.shp") points = gpd.read_file("marked_points.shp") # 统一坐标系(若不一致则转换) if regions.crs != points.crs: points = points.to_crs(regions.crs) # 空间连接:统计区域内的点数 joined = gpd.sjoin(regions, points, how="left", predicate="contains") # 按区域分组计数并合并结果 region_counts = joined.groupby(regions.index).size().reset_index(name="point_count") final_result = regions.merge(region_counts, left_index=True, right_index=True) # 可选:保存结果到文件 final_result.to_file("russia_region_point_counts.shp") # 打印结果示例 print(final_result[["region_name", "point_count"]])
- 说明:
predicate="contains"仅统计完全在区域内的点;若需包含边界上的点,改用predicate="intersects"。
三、关键注意事项
- 坐标系统一:区域和点位图层必须用相同坐标系,否则空间连接会出错,GIS工具和GeoPandas都支持坐标系转换。
- 拓扑修正:若区域边界存在误差,可能导致点位误判,可使用QGIS的「拓扑检查器」或ArcGIS的「修复几何」工具修正。
- 矢量化精度:原始图片转矢量时,手动校准边界和点位能提升统计准确性。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

