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

如何从Geopandas数据框中提取边界框(bbox)内的坐标?

问题描述

我有一个包含坐标的Geopandas数据框,以及一个边界框(bbox)。希望用该边界框筛选出数据框中落在框内的坐标,尝试使用gpd.clip方法提取,但返回了空数据框。请问提取边界框内坐标的最优方法是什么?

测试代码如下:

from shapely.geometry import box
import geopandas as gpd
from shapely.geometry import Point

# 数据框示例内容
#          lat           lon         geometry
#     0   30.302228   -87.475474  POINT (-87.4754735 30.3022278)
#     ...(省略其他行)
#     18  31.109081   -85.516056  POINT (-85.516056 31.109081)
#     19  31.109327   -85.515871  POINT (-85.515871 31.109327)
#     ...(省略其他行)

bbox = box(*[30.902576115004003,-85.72642861167968,31.072530650777363,-85.57774194396336])
geometry = [Point(xy) for xy in zip(nodes.lon, nodes.lat)]
gdf = gpd.GeoDataFrame(nodes, crs="EPSG:4326", geometry=geometry)
df_clipped = gpd.clip(gdf, mask=bbox)
print(df_clipped)  # 返回空数据框
问题原因

返回空数据框的核心问题是**shapely.geometry.box的参数顺序错误**:

  • box的正确参数顺序为:minx, miny, maxx, maxy,对应最小经度、最小纬度、最大经度、最大纬度
  • 你传入的参数顺序是[纬度最小值, 经度最小值, 纬度最大值, 经度最大值],颠倒了经纬度的位置,导致生成的边界框和目标筛选区域完全不重叠,因此gpd.clip没有返回任何结果。
解决方案

以下是三种可行的筛选方法,按适用场景推荐:

方法1:修正参数后使用gpd.clip

调整box的参数顺序为标准的minx, miny, maxx, maxy,再执行裁剪:

# 修正bbox参数顺序:最小经度、最小纬度、最大经度、最大纬度
bbox = box(*[-85.72642861167968, 30.902576115004003, -85.57774194396336, 31.072530650777363])
df_clipped = gpd.clip(gdf, mask=bbox)
print(df_clipped)
# 会返回索引18、19的点,这两个点落在目标边界框内

方法2:空间索引快速筛选(大数据量最优)

Geopandas的空间索引能大幅提升筛选效率,适合数据量较大的场景:

# 创建空间索引
sindex = gdf.sindex
# 用边界框查询候选索引
candidate_idx = list(sindex.intersection(bbox.bounds))
candidates = gdf.iloc[candidate_idx]
# 精确筛选落在边界框内的点
df_filtered = candidates[candidates.geometry.within(bbox)]

方法3:直接用坐标范围筛选(简单高效)

如果数据的经纬度列明确,直接用数值范围筛选是最快捷的方式:

min_lon, min_lat, max_lon, max_lat = -85.72642861167968, 30.902576115004003, -85.57774194396336, 31.072530650777363
df_filtered = gdf[
    (gdf['lon'] >= min_lon) & 
    (gdf['lon'] <= max_lon) & 
    (gdf['lat'] >= min_lat) & 
    (gdf['lat'] <= max_lat)
]
总结
  • 小数据量:优先使用方法3(直接坐标筛选),代码简洁且速度快
  • 大数据量:优先使用方法2(空间索引),避免全表遍历造成的性能损耗
  • 需要保留空间裁剪逻辑:使用方法1(修正参数后的gpd.clip)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:01:44