如何在OSMnx图中包含轮渡

问题描述

建立图形时,是否可以让OSMnx(大型工具BTW)包括载车渡轮?如果不这样做,建立这样一个图形的最直接方法是什么?问题不仅在于轮渡路线本身不存在,而且,如果没有轮渡,实际上可驾车到达的岛屿就不会包括在公路网中。

我尝试使用osmnx.settings.useful_tags_way无济于事。在overpass-api中使用'route'='ferry'返回我想包含在图中的内容,因此我一直在编辑OSMnx downloads.py文件,试图直接更改overpass-api调用

谢谢!

解决方法

第一遍(骇客)

我通过编辑osmnx的downloads.py文件并替换了这一行(最初是在第350行附近)提出了一个相当棘手的部分解决方案:

query_str = f"{overpass_settings};(way{osm_filter}(poly:'{polygon_coord_str}');>;);out;"

具有:

osm_filter2 = f'["route"="ferry"]'
query_str = f"{overpass_settings};(way{osm_filter}(poly:'{polygon_coord_str}');>;way{osm_filter2}(poly:'{polygon_coord_str}');>;);out;"

查询字符串格式经过反复试验。如果事实证明这是最好的方法,我将尝试使其更广泛地适用(在预先定义的过滤器列表中添加“轮渡”,而不是硬编码,传递过滤器列表等)。 / p>

好得多

我发现构建单独的图并使用networkx.union或networkx.disjoint_union合并它们并没有得到可用的结果。因此,我在osmnx downloads.py文件的版本中添加了多重过滤功能。我还添加了一些其他网络类型选项。因此,现在可以将“ ferry”作为osmnx.graph_from_ *函数的network_type传递:

network_type = "ferry"

我现在也可以使用管道定界符传递多种网络类型:

network_type = "drive|ferry"

得到一个是两者的并集的图。这样做时,我发现创建第二个仅轮渡图并将其用作更新组合网络图中的标签的参考很有用。最好先加载非简化图,然后在此步骤之后自己对其进行简化。

仍在尝试

仍然存在非连接性问题-现在在仅轮渡网络中。并非仅与渡轮共享港口的,在孤立的交叉口处的汽车轮渡不包括在仅轮渡的图表中,因此,合并网络中对应渡轮的对等标签不会根据需要进行更新。组合网络中的渡轮(network_type =“ drive | ferry”)均已正确存在并已连接,因此,它们各自的岛现在位于公路网上-很棒。但是,由于未更新其标签,这些孤立的渡轮正在获得默认的高速公路速度(并且我正在进行旅行时间分析)。我可以使用以下方法解决此问题:

if not 'highway' in edge[3]:

但是,对于一个可靠的解决方案,我认为我们希望能够对其进行显式标记。

我仍然很想听听其他人的想法。