Python: Как я могу импортировать водные пути из OpenStreetMaps в виде графа, чтобы я мог проводить анализ графа с помощью сетиx - PullRequest
0 голосов
/ 13 сентября 2018

Поначалу спасибо, что нашли время, чтобы помочь мне :-) Я хочу создать неориентированный граф из водных путей, например, из каналов Венеции или Амстердама.

В 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 был бы лучшим, так как у меня сразу был график, который я мог бы использовать для функций networkx, таких как кратчайший путь Дейкстры.

Другой способ, которым я думал, был пакет путепровода:

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"]

Но это все равно не работает, потому что я не понял, как отфильтровать данные и преобразовать их в график, чтобы сеть могла использовать их.

Надеюсь, вы, ребята (и девушки :-)), можете мне помочь, потому что я понятия не имею, как идти дальше.

С уважением,

Йерун

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете использовать OSMnx для получения других типов инфраструктуры, как описано в этом примере . Я не уверен, как 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))
...