【问题标题】:Creating a dataframe of Shapely polygons gives "ValueError: A LinearRing must have at least 3 coordinate tuples"创建 Shapely 多边形的数据框会给出“ValueError:LinearRing 必须至少有 3 个坐标元组”
【发布时间】:2014-02-10 11:36:42
【问题描述】:

我想创建一个中国省级人口的热图,我发现this guide 在这里遇到了类似的问题。

尽管我不得不承认我并没有完全理解它们,但我浏览示例代码没有任何问题。但是,当我试图通过使用中国的 shapefile 来模拟示例时,代码运行正常,直到以下

df_map = pd.DataFrame({
    'poly': [Polygon(xy) for xy in m.china],
    'ward_name': [ward['NAME'] for ward in m.china_info]})

它会生成一个错误提示

ValueError: A LinearRing must have at least 3 coordinate tuples

有人可以向我解释导致此错误的原因吗?

【问题讨论】:

    标签: python polygon valueerror shapely


    【解决方案1】:

    报告错误时,在问题中包含完整的错误消息通常是个好主意。 Python 回溯包含比最终错误消息更多的信息,包括发生错误的模块和行号。

    您的错误出现在shapely 代码中。我可以通过传递Polygon 仅包含两点的序列来重现错误消息; Polygon 至少需要三分。这是一个例子。

    从 shapely 库中导入 Polygon

    >>> from shapely.geometry import Polygon
    

    通过三个点的序列有效:

    >>> p = Polygon([(0, 0), (0, 1), (1, 1)])
    

    但只给出两点会导致错误:

    >>> p = Polygon([(0, 0), (0, 1)])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 229, in __init__
        self._geom, self._ndim = geos_polygon_from_py(shell, holes)
      File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 445, in geos_polygon_from_py
        geos_shell, ndim = geos_linearring_from_py(shell)
      File "/home/warren/anaconda/lib/python2.7/site-packages/shapely/geometry/polygon.py", line 393, in geos_linearring_from_py
        "A LinearRing must have at least 3 coordinate tuples")
    ValueError: A LinearRing must have at least 3 coordinate tuples
    

    显然m.china 中有一个项目少于三分。您正在使用 ipython,因此您可以在尝试创建 df_map 之前打印 m.china。这应该可以帮助您确定发生了什么。

    【讨论】:

    • 谢谢沃伦。你说的对。我检查了 m.china 列表。它有几个元素,每个元素少于三个点。但我现在能做什么? m.china 和 m.london 一样,直接从 shapefile 中读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多