The*_*One 2 python polygon shapely valueerror
我想创建一个热图,比如中国的省级人口,我在这里找到了类似问题的指南。
尽管我不得不承认我并没有完全理解它们,但我在阅读示例代码时没有问题。然而,当我试图通过使用中国的 shapefile 来模仿这个例子时,代码运行正常,直到以下
df_map = pd.DataFrame({
'poly': [Polygon(xy) for xy in m.china],
'ward_name': [ward['NAME'] for ward in m.china_info]})
Run Code Online (Sandbox Code Playgroud)
它产生一个错误,说
df_map = pd.DataFrame({
'poly': [Polygon(xy) for xy in m.china],
'ward_name': [ward['NAME'] for ward in m.china_info]})
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释是什么导致了这个错误?
当您报告错误时,在您的问题中包含完整的错误消息通常是个好主意。Python 回溯包含比最终错误消息更多的信息,包括发生错误的模块和行号。
您的错误发生在shapely代码中。我可以通过只传递Polygon两个点的序列来重现错误消息;Polygon至少需要三点。这是一个例子。
Polygon从 shapely 库导入:
>>> from shapely.geometry import Polygon
Run Code Online (Sandbox Code Playgroud)
传递三点序列有效:
>>> p = Polygon([(0, 0), (0, 1), (1, 1)])
Run Code Online (Sandbox Code Playgroud)
但是只给出两点会导致错误:
>>> 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
Run Code Online (Sandbox Code Playgroud)
显然有一个项目的m.china分数少于三分。您正在使用 ipython,因此您可以m.china在尝试创建df_map. 这应该可以帮助您确定发生了什么。