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

如何统计相同ID对应缓冲区内同ID点要素的数量

统计同ID缓冲区内同ID点数量实现方案

以下方案默认buffer_gdf和point_gdf均为已配置正确空间坐标系的空间数据对象,核心逻辑为按ID分组匹配,避免全量空间计算提升效率,适配大批量数据场景

Python(GeoPandas + Pandas)实现

import geopandas as gpd
import pandas as pd

# 给缓冲区表初始化点数量统计列
buffer_gdf['point_count'] = 0

# 遍历所有唯一ID,仅匹配同ID的缓冲区和点做空间计算
for unique_id in buffer_gdf['ID'].unique():
    # 筛选当前ID的子集
    sub_buffer = buffer_gdf[buffer_gdf['ID'] == unique_id].copy()
    sub_point = point_gdf[point_gdf['ID'] == unique_id].copy()
    # 空间连接:筛选落在缓冲区内的点
    sjoin_res = gpd.sjoin(sub_buffer, sub_point, predicate='contains', how='left')
    # 统计每个缓冲区对应点数量
    count_res = sjoin_res.groupby(level=0).size()
    # 结果回写原缓冲区表
    buffer_gdf.loc[count_res.index, 'point_count'] = count_res

如果需要点与缓冲区边界接触就算入,将predicate参数值改为intersects即可。

R(sf + dplyr)实现

library(sf)
library(dplyr)

buffer_gdf <- buffer_gdf %>%
  # 按ID分组处理
  group_by(ID) %>%
  mutate(
    # 统计当前ID每个缓冲区包含的同ID点数量
    point_count = lengths(st_contains(
      geometry, 
      point_gdf %>% filter(ID == cur_group()$ID) %>% pull(geometry)
    ))
  ) %>%
  ungroup()

sf包内置空间索引优化,分组计算逻辑大幅降低不必要的跨ID空间匹配开销,适合处理十万级以上的点要素数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:12:04