首先感谢您花时间帮助我:-) 我想从水路创建一个无向图,例如从威尼斯或阿姆斯特丹的运河。
OpenStreetMaps具有这些城市的水路网络的图形,但是OSMnx软件包中没有这样的过滤器来过滤水路(或者也许我还不知道;-))。
import osmnx as ox
G = ox.graph_from_bbox(52.36309012572587,4.890326718121118,52.36590601699889,4.898316757037793, network_type='all')
G_projected = ox.project_graph(G)
ox.plot_graph(G_projected)
我认为我可以下载整个地图,然后仅对水路网络进行过滤。但是我不知道该怎么做。 OSMnx会是最好的,因为我随后立即有了一个图表,可以将其用于networksx的功能,例如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可以使用它。
希望你们(和女孩们:-)可以帮助我,因为我不知道该怎么走。
亲切的问候,
耶罗恩
答案 0 :(得分:1)
您可以使用OSMnx获得this example中所述的其他类型的基础结构。我不确定OSM如何标记水路,但这是您可以适应的纽约地铁示例:
import osmnx as ox
ox.config(use_cache=True, log_console=True)
point = (40.73120,-73.98672)
dist = 10000
north, south, east, west = ox.bbox_from_point(point, distance=dist)
G = ox.graph_from_bbox(north=north, south=south, east=east, west=west,
retain_all=True, truncate_by_edge=True, simplify=True,
network_type='none', infrastructure='way["railway"~"subway"]')
fig, ax = ox.plot_graph(ox.project_graph(G))