Osmnx TypeError в graph_from_polygon после обновления с 0.5.1 до 0.8.2

После завершения моей дипломной работы с osmnx в прошлом году я на некоторое время ушел в Python PTSD. Но с выходом 5-летних оценок ACS за 2017 год мне нужно провести новый анализ данных. Итак, я обновил свой osmnx до 0.8.2, обновил conda --all -c conda-forge и запустил свой старый ноутбук.

В основном это работает, но я получаю сообщение об ошибке с функцией graph_from_polygon.

TypeError                                 Traceback (most recent call last)
<ipython-input-60-96e1e789c1a5> in <module>()
---> 58     network, network_stats, tract_polygon = load_network(optimal_tracts, utm_crs)
     59 

<ipython-input-56-3036c449a01f> in load_network(opt_tracts, my_crs)
     34 
---> 35     net = ox.core.graph_from_polygon(projected_circle,network_type='bike')
     36 

/Users/tom/anaconda/lib/python2.7/site-packages/osmnx/core.pyc in 
graph_from_polygon(polygon, network_type, simplify, retain_all, 
truncate_by_edge, name, timeout, memory, max_query_area_size, 
clean_periphery, infrastructure, custom_filter)
   1741    max_query_area_size=max_query_area_size,
   1742    infrastructure=infrastructure, custom_filter=custom_filter)
-> 1743         G_buffered = create_graph(response_jsons, name=name, 
retain_all=True, network_type=network_type)
   1744         G_buffered = truncate_graph_polygon(G_buffered, 
polygon_buffered, retain_all=True, truncate_by_edge=truncate_by_edge)
   1745 

/Users/tom/anaconda/lib/python2.7/site-packages/osmnx/core.pyc in 
create_graph(response_jsons, name, retain_all, network_type)
   1358     # add length (great circle distance between nodes) attribute to each edge to
   1359     # use as weight
-> 1360     if len(G.edges) > 0:
   1361         G = add_edge_lengths(G)
   1362 

TypeError: object of type 'instancemethod' has no len()

До этого момента пакеты по-прежнему прекрасно работают вместе. projected_circle выглядит правильно созданным как многоугольник UTM широта-долгота (epsg: 32617, тестовый город Шарлотт, Северная Каролина). Вот соответствующий код. (opt_tracts - это GeoDataFrame набора участков переписи).

def load_network(opt_tracts,my_crs):    

 tract_poly=opt_tracts.unary_union

 projected_circle,projection = ox.projection.project_geometry(tract_poly,crs = {'init': my_crs}, to_latlong=True)

 net = ox.core.graph_from_polygon(projected_circle,network_type='bike')

 net_stats = ox.stats.basic_stats(net,area=8047)

 return (net, net_stats, tract_poly)

А вот вывод консоли:

Got all network data within polygon from API in 1 request(s) and 0.61 seconds
Creating networkx graph from downloaded OSM data...
Created graph with 11,371 nodes and 22,550 edges in 1.10 seconds
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Какая версия networkx у вас установлена?

Я бы предложил создать новую виртуальную среду, установить в нее OSMnx, а затем запустить оттуда свой ноутбук jupyter, например:

conda create -c conda-forge -n OX python=3 osmnx notebook

См. Также: https://osmnx.readthedocs.io/en/stable/#installation

Я нахожусь в: networkx 2.2 py_1 conda-forge. Я очень надеюсь, что мне не придется начинать с чистого листа, потому что в этой среде есть множество других пакетов, которые нужны моему коду. Но я попробую. Также я использую python 2.7, если это важно.

Tom Holub 12.12.2018 23:52

Другие вопросы по теме