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

st_join()行为不一致:使用旧版sf包的结果是否可信?

问题解答

版本差异原因

sf 1.0.0版本开始默认启用S2球面几何库,对空间几何的有效性检查远严于旧版(0.9.x及之前)使用的GEOS平面几何库。你办公电脑的新版sf检测出GADM地图里有4个多边形存在边交叉的无效几何,而旧版sf会跳过这类严格检查,直接执行匹配操作。

旧版sf结果的可信度

旧版得到的结果存在不确定性,不能直接认为完全可信:

  • 如果你的点没有落在那4个有无效几何的多边形范围内,结果是可靠的;
  • 若有点落在这些无效多边形里,旧版GEOS处理交叉边时的行为是未定义的,可能出现点匹配错误(比如匹配到错误区域,或无法匹配),这类结果的准确性无法保证。

解决建议

要在新版sf中得到可靠结果,同时兼容旧版逻辑,可参考以下方法:

  1. 修复无效几何(推荐):对地图数据执行几何修复后再做匹配
    x <- st_read(my_map)
    x <- st_make_valid(x)  # 修复无效多边形
    y <- st_as_sf(my_points, coords = c('long', 'lat'), crs = 4326)
    y <- st_join(y, x)
    
  2. 临时切换到平面几何模式:关闭S2检查,让新版sf沿用旧版GEOS的处理逻辑
    sf_use_s2(FALSE)  # 全局关闭S2
    x <- st_read(my_map)
    y <- st_as_sf(my_points, coords = c('long', 'lat'), crs = 4326)
    y <- st_join(y, x)
    
  3. 结果验证:无论用哪种方式,建议随机抽取部分点(尤其是靠近无效几何的点),手动核对匹配结果是否正确,确保数据准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:25:19