2014-01-21 7 views
1

Я хочу создать тепловую карту, скажем, провинциального населения Китая, и я нашел это руководство для аналогичной проблемы http://sensitivecities.com/so-youd-like-to-make-a-map-using-python-EN.html#.Ut3k7bS-thF здесь.Визуализировать данные на картах с использованием Python

У меня нет проблем с использованием кода примера, хотя я должен признать, что я не полностью их понимаю. Однако, когда я пытался подражать примеру с помощью шейп Китая, код побежал нормально до следующего

В работе [6]:

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 должен иметь не менее 3 координатных кортежей

Может кто-нибудь объяснить мне причину этой ошибки?

ответ

2

Как правило, рекомендуется включать полное сообщение об ошибке в свой вопрос, когда вы сообщаете об ошибке. Трайбеты Python включают больше информации, чем окончательное сообщение об ошибке, включая номер модуля и номер строки, где произошла ошибка.

Ваша ошибка возникает в коде shapely. Я могу воспроизвести сообщение об ошибке, передав Polygon последовательность из двух точек; Polygon требует не менее трех пунктов. Вот пример.

Импорт Polygon из стройной библиотеки:

>>> from shapely.geometry import Polygon 

Passing последовательность из трех точек работы:

>>> 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, который имеет менее трех пои NTS. Вы используете ipython, чтобы вы могли распечатать m.china, прежде чем пытаться создать df_map. Это поможет вам определить, что происходит.

+0

Спасибо Уоррен. Ты прав. Я проверил список m.china. В нем есть несколько элементов, каждый из которых имеет менее трех очков. Но что я могу сделать сейчас? m.china, как и m.london, непосредственно считывается из шейп-файлов. – TheStupidOne

Смежные вопросы