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

Geopandas用contains判断Shapely点所属巴黎行政区返回空是什么原因

问题原因分析
  • 最核心的原因是埃菲尔铁塔点对象和行政区数据的空间参考坐标系(CRS)不匹配,且坐标数值范围完全不重叠:
    从输出的行政区数据前两行可以看到,行政区geometry的坐标X轴取值在45万左右,Y轴取值在541万左右,但定义的埃菲尔铁塔点坐标是(255422.6, 6250868.9),二者坐标范围完全没有交集,因此contains判断返回全为False,最终筛选结果为空。
  • 具体可能的两种诱因:
    1. 创建eiffel_tower时使用的坐标来源和行政区数据坐标系不一致,没有做坐标系转换。比如行政区使用的是巴黎常用的UTM 31N(EPSG:32631)投影坐标,而输入的点坐标可能属于其他投影体系。
    2. 输入的埃菲尔铁塔坐标数值本身有误:埃菲尔铁塔在UTM 31N坐标系下的真实坐标大致为X:448295、Y:5411935,和行政区数据的坐标范围吻合,当前使用的点坐标数值明显不符合该区间。
解决方法
  • 首先执行print(districts.crs)确认行政区数据的坐标系
  • 确认埃菲尔铁塔坐标对应的原始坐标系,将点对象转换为和行政区一致的CRS后再做空间判断,示例代码如下:
import geopandas as gpd
from shapely.geometry import Point

# 示例:如果点的原始坐标是WGS84经纬度(埃菲尔铁塔真实经纬度为2.2945°E, 48.8584°N)
eiffel_tower = Point(2.2945, 48.8584)
# 给点设置原始CRS
gdf_point = gpd.GeoDataFrame(geometry=[eiffel_tower], crs="EPSG:4326")
# 转换为行政区的CRS
gdf_point = gdf_point.to_crs(districts.crs)
# 再做包含判断
mask = districts.contains(gdf_point.geometry.iloc[0])
print(districts[mask])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:27:03