2

我想创建一个中国省级人口的热图,我在这里找到了类似问题的指南。

尽管我不得不承认我并没有完全理解它们,但通过示例代码我没有问题。但是,当我试图通过使用中国的 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

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

4

1 回答 1

5

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

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

Polygon从 shapely 库导入:

>>> 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,因此您可以m.china在尝试创建df_map. 这应该可以帮助您确定发生了什么。

于 2014-01-21T04:40:52.347 回答