【发布时间】:2021-05-16 15:21:54
【问题描述】:
我正在尝试查找给定城市中沿特定方位延伸的所有街道,我正在建立这些边缘的列表,如下所示:
G = ox.graph_from_place('Milpitas, CA')
G = ox.add_edge_bearings(ox.get_undirected(G))
sixtydegrees = []
uninteresting = []
for u, v, k, data in G.edges(keys=True, data=True):
if np.isnan(data['bearing']):
uninteresting.append((u, v, k))
else:
b = round(data['bearing'])
if (b == 60 or b == 240):
sixtydegrees.append((u, v, k))
else:
uninteresting.append((u, v, k))
G.remove_edges_from(G.edges - uninteresting)
但是,这会产生像下面这样的边缘,其中包括沿多个轴承的多个段。虽然起始节点和结束节点彼此相距 60º,但边由 4 段组成,其中没有一条沿 60º 延伸。这是一条穿过公园的假想线,连接起点和终点节点,沿 60º 延伸。
osmnx.bearing.add_edge_bearings 是(按设计)对源节点到目标节点之间角度的简单计算。
要真正找到街道,这可能意味着如上所述的街道部分,考虑到 OSM 数据的组织方式,沿着给定的方位,我将不得不遍历 xy 对和计算每个轴承?还是我缺少另一个更优雅的解决方案?
【问题讨论】:
-
如果您在创建图表时设置
simplify=False,您将获得直线街道段。请参阅文档。 -
谢谢,这有助于澄清很多。因此,如果使用简化=True,边是交叉路口(或死胡同)之间的高速公路,而在简化=False 时,边是构成高速公路的每条直线。使用更大的边集更清洁,可能更有效。
标签: osmnx