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

从GeoJSON创建Polygon对象时出现LinearRing坐标元组不足报错

报错原文:ValueError: A LinearRing must have at least 3 coordinate tuples
中文翻译:值错误:线性环必须包含至少3个坐标元组

报错原因

两个问题共同导致这个报错:

  • 第一是坐标格式不匹配:GeoJSON中Polygon类型的坐标是三层嵌套结构,最外层包裹外环和所有内环(洞)的坐标,你直接把整个三层坐标数组传给Shapely的Polygon构造方法时,库会把第二层的数组元素当成单个坐标点解析,根本识别不到具体的经纬度元组,自然凑不够构成环需要的至少3个点。
  • 第二是循环逻辑有问题:双层循环会重复追加多边形坐标,比如j=0时会追加第2个到最后一个要素的坐标,j=1时又会追加第3个到最后一个要素的坐标,最后geom数组里存的不是一一对应的单个多边形坐标,混了大量重复数据。
修复方法

不要自己手动拆GeoJSON的坐标嵌套,直接用Shapely自带的shape工具方法解析几何对象就行,自动适配格式,不会出嵌套层级的错,同时把冗余的双层循环改成单层遍历,避免重复读数据:

from shapely.geometry import shape

def check_overlap():
    raw_coords = []
    polygons = []
    # 单层遍历所有要素即可,不需要双层循环
    for feature in data['features']:
        # 存原始坐标
        raw_coords.append(feature['geometry']['coordinates'])
        # 直接解析成Shapely几何对象,自动兼容带洞多边形、多部件多边形等格式
        poly = shape(feature['geometry'])
        polygons.append(poly)

    polygon1 = polygons[0]
    print(polygon1)
    print(raw_coords[1])
    # 相交判断直接取polygons里的对象调用方法即可
    # print(polygon1.intersects(polygons[1]))
补充说明

如果你的GeoJSON里存在MultiPolygon(多面片)类型的要素,手动拆坐标很容易出格式错误,shape方法会自动识别为MultiPolygon类型,空间计算的调用方法和普通Polygon完全一致,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:54:22