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

使用GeoDataFrame.sjoin筛选澳新州Uber数据点仍有外溢问题求解

问题

在Folium地图上可视化澳大利亚新南威尔士州的Uber行程数据集时,发现部分数据点落在海域而非陆地区域。尝试使用新南威尔士州的多边形数据集,通过GeoDataFrame.sjoin并指定"contains"谓词进行空间连接,但仍有部分点位于多边形外。

使用的代码如下:

geo_df = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.pick_up_lon, df.pick_up_lat), crs="EPSG:4326")
poly_df = gpd.read_file("state.geojson")
join_df = gpd.sjoin(poly_df, geo_df, predicate="contains")
  • [应用多边形前的地图:可见大量海域内的Uber行程点]
  • [应用多边形及sjoin后的地图:仍存在海域内的行程点]
解决方案
  • 验证多边形数据的完整性与准确性
    新南威尔士州的GeoJSON边界可能存在缺失(比如未覆盖沿海岛屿、半岛)或坐标误差,导致部分陆地行程点被判定为在多边形外。建议更换为官方数据源,比如澳大利亚统计局(ABS)发布的州边界数据,或从OpenStreetMap提取更精确的边界。

  • 调整空间筛选的逻辑与方式
    当前代码是用多边形表左连接点表,容易保留不匹配的记录。建议直接筛选出被多边形包含的点,两种实现方式:

    # 方式1:调换sjoin的表顺序,保留在多边形内的点
    join_df = gpd.sjoin(geo_df, poly_df, predicate="within")
    
    # 方式2:直接用within方法结合多边形合并后的几何对象
    merged_poly = poly_df.unary_union
    valid_points = geo_df[geo_df.geometry.within(merged_poly)]
    
  • 修复拓扑与坐标精度问题
    GPS行程点可能存在微小偏移,或多边形本身有拓扑错误(比如自相交),导致空间判断失效。可以先修复多边形拓扑,再做筛选:

    # 修复多边形拓扑错误
    poly_df["geometry"] = poly_df.geometry.buffer(0)
    # 筛选有效点
    valid_points = geo_df[geo_df.geometry.within(poly_df.iloc[0]["geometry"])]
    
  • 确认CRS完全一致
    即使代码中指定了CRS,仍需验证点数据与多边形数据的坐标参考系是否完全匹配:

    print("点数据CRS:", geo_df.crs)
    print("多边形数据CRS:", poly_df.crs)
    # 若不一致,统一转换为相同CRS
    if geo_df.crs != poly_df.crs:
        poly_df = poly_df.to_crs(geo_df.crs)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:20:28