Python:如何将OpenStreetMaps中的水道作为图形导入,以便使用networkx进行图形分析

Python:如何将OpenStreetMaps中的水道作为图形导入,以便使用networkx进行图形分析,python,graph,networkx,overpass-api,osmnx,Python,Graph,Networkx,Overpass Api,Osmnx,首先感谢您抽出时间来帮助我:-) 我想从水路创建一个无向图,例如从威尼斯或阿姆斯特丹的运河 OpenStreetMaps有这些城市的水路网络图,但是OSMnx包没有这样的过滤器来过滤水路(或者我还不知道;-) 我想我可以下载整个地图,然后只过滤水道网络。但我不知道该怎么进一步。OSMnx将是最好的,因为我马上就有了一个图形,可以用于网络的功能,比如Dijkstra的最短路径 我想到的另一种方式是立交桥方案: import overpass import networkx as nx impor

首先感谢您抽出时间来帮助我:-) 我想从水路创建一个无向图,例如从威尼斯或阿姆斯特丹的运河

OpenStreetMaps有这些城市的水路网络图,但是OSMnx包没有这样的过滤器来过滤水路(或者我还不知道;-)

我想我可以下载整个地图,然后只过滤水道网络。但我不知道该怎么进一步。OSMnx将是最好的,因为我马上就有了一个图形,可以用于网络的功能,比如Dijkstra的最短路径

我想到的另一种方式是立交桥方案:

import overpass
import networkx as nx

import matplotlib.pyplot as plt


api= overpass.API()
data = api.get('way(52.36309012572587,4.890326718121118,52.36590601699889,4.898316757037793);(._;>;)', verbosity='geom')
[f for f in data.features if f.geometry['type'] == "LineString"]
但这仍然不起作用,因为我还没有弄清楚如何过滤数据并将其转换为图形,以便networkx可以使用它

希望你们能帮助我,因为我不知道该怎么做

亲切问候,


Jeroen

您可以使用OSMnx获取其他类型的基础设施,如中所述,使用
自定义过滤器
参数:

将osmnx作为ox导入
ox.config(使用缓存=True,日志控制台=True)
G=ox.graph_from_place('Amsterdam'),retain_all=False,truncate_by_edge=False,
simplify=True,自定义_过滤器='[“水道”~“运河”]')
图,ax=ox.plot\u图(G)

谢谢,如果您键入infrastructure='way[“waterway”]它可以工作,现在我只需要将图形设置正确即可:-)
import overpass
import networkx as nx

import matplotlib.pyplot as plt


api= overpass.API()
data = api.get('way(52.36309012572587,4.890326718121118,52.36590601699889,4.898316757037793);(._;>;)', verbosity='geom')
[f for f in data.features if f.geometry['type'] == "LineString"]