【问题标题】:osmnx: g.node is deprecated but g.nodes leads to errorosmnx: g.node 已弃用但 g.nodes 导致错误
【发布时间】:2021-09-14 07:39:00
【问题描述】:

我正在尝试运行此示例代码。它说“AttributeError:'MultiDiGraph'对象没有属性'node'”,我发现g.node已被弃用并被g.nodes取代。但是如果我只是将其更改为 g.nodes,则会出现另一个错误:

    Traceback (most recent call last):
  File "/home/anderledani/PycharmProjects/pythonProject1/snaptoroadtest.py", line 12, in <module>
    nn = min((u, v), key=lambda n: ox.distance.great_circle_vec(lat, lng, G.nodes[n]['y'], G.nodes[n]['x']))
  File "/home/anderledani/PycharmProjects/pythonProject1/snaptoroadtest.py", line 12, in <lambda>
    nn = min((u, v), key=lambda n: ox.distance.great_circle_vec(lat, lng, G.nodes[n]['y'], G.nodes[n]['x']))
  File "/home/anderledani/PycharmProjects/pythonProject1/venv/lib/python3.8/site-packages/networkx/classes/reportviews.py", line 187, in __getitem__
    return self._nodes[n]
KeyError: 0

我尝试运行的代码:

import matplotlib.pyplot as plt
import osmnx as ox
ox.config(log_console=True, use_cache=True)

# get graph and define a reference point
G = ox.graph_from_point((13.743942, 100.570006), network_type='drive', dist=350, simplify=True)
lat = 13.744001
lng = 100.570457

# get nearest node incident to nearest edge to reference point
geom, u, v = ox.distance.get_nearest_edge(G, (lat, lng))
nn = min((u, v), key=lambda n: ox.distance.great_circle_vec(lat, lng, G.nodes[n]['y'], G.nodes[n]['x']))

# plot the reference point and this nearest node
fig, ax = ox.plot_graph(G, node_color='#999999', show=False, close=False)
ax.scatter(lng, lat, c='r', marker='x')
ax.scatter(G.nodes[nn]['x'], G.nodes[nn]['y'], c='r', s=50, zorder=2)
plt.show()

【问题讨论】:

    标签: python networkx osmnx


    【解决方案1】:

    osmnx 的文档中,get_nearest_edge 方法被标记为已弃用。

    但是,我认为您可以直接获取所需的变量nn - 我猜它是最近的节点 - 带有:nearest_nodes

    nn = ox.distance.nearest_nodes(G, lat, lng)
    

    如果你想要离最近边最近的节点,更新到新方法nearest_edges

    (u, v, key) = nearest_edges(G, lat, lng)
    

    包含提问者代码的第二个答案:How to find nearest node along nearest edge?

    【讨论】:

    • 我不仅在寻找最近的节点,而且还在寻找最近边缘的最近节点。
    • 在这种情况下,试试最近的方法,(我已经在上面添加了),并检查返回 (u,v,key) 的内容是什么。
    • u和v是边两端的两个节点的id吗?
    • 根据我上面代码中的文档,它应该是边缘的两个节点。键应指定特定的边(因为底层图是多图)。
    • 那我能用euclidean_dist_vec函数判断哪个节点更近吗?
    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2012-07-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多