2017-07-26 3 views
1

ロンドンのウォークパスのグラフ(OSMNXから変換されたもの)には、別のhighway属性(openstreetmapのストリートタイプ)を持つ667.588のエッジが含まれています。 shortest_pathアルゴリズムの実行は非常に遅い(4秒)。スピードを上げるために、主な接続や都市の構造を失うことなく、系統的な方法でエッジの数を大幅に減らしたいと思います。助言がありますか?いくつかの近いノードをより重要なものにグループ化してサイズを小さくする方法はありますか?ネットワークのオープンストリートマップのグラフサイズを小さくする

+0

はStackOverflowのへようこそ。あなたの質問はやや広いです。 SOユーザーは、一般的な方法論を提案するのではなく、特定の種類のコードや問題に悩まされているときに、ほとんどの場合役立ちます。あなたが持っているハイウェイ属性の種類は何ですか?それほど重要でないかもしれないものを除外することが考えられますか? –

+0

私はいくつかのノードをグループ化し、1つのエッジだけでノードを切り取る方法を探しています。 –

+1

1-2の高速道路カテゴリを使用できますか?私はあなたがほしいと思うのは "歩道"だけですね? 1つのエッジだけのノードに関しては、次のようなノードを削除することができます –

答えて

0

これは、使用しているネットワークの種類(歩行、自転車、ドライブ、ドライブサービス、すべてなど)によって異なります。 driveネットワークタイプは、主要なルートを最小限にし、優先順位をつけますが、歩行者の道と通路を犠牲にしています。

OSMnxは、組み込み関数でsimplify the graph's topologyの機能も提供します。これは、グラフのサイズを90%まで縮小することができない場合には、交差点ノードやデッドエンドノード、エッジジオメトリを正確に保持しながら、忠実に行うことができます。

+0

グラフフォーム「London、UK」を直接作成します。だから、ネットワークは単純化されており、もう一度やり直すことはできないようです。 –

1

あなたはあなたのメインのグラフGから目的の高速道路の種類とエッジを抽出することができます。

highways_to_keep = ['motorway', 'trunk', 'primary'] 
H = nx.MultiDiGraph() 
for u,v,attr in G.edges(data=True): 
    if attr['highway'] in highways_to_keep: 
     H.add_edge(u,v,attr_dict=attr) 
     H.node[u] = G.node[u] 
     H.node[v] = G.node[v] 

ここで、我々は最初のOSMnxが使用するグラフの種類である空のMultiDiGraphを、初期化し、その後からデータを移入メイングラフG'highway'の属性がhighways_to_keepのリストにある場合。ハイウェイタイプの詳細については、this OpenStreetMapページを参照してください。

グラフは有効なNetworkXグラフですが、OSMnxの機能を利用するにはもう1つ必要があります。 G.graphを実行すると、crs(座標参照系)などのグラフ属性が表示されます。あなたは、新たにグラフを作成するには、この情報を追加する必要があります

H.graph = G.graph 

ここHのプロット、osmnx.plot_graph(H)さ:

enter image description here

+0

ありがとうございます。私はウォーキングマップを使用したいと思っています。その大部分は居住道路(高速道路なし)です。私は住宅街だけを維持すべきですか?彼らはまだかなり多いです。 –

+1

この場合、OSMnxが提供する 'walk'ネットワークタイプのみに依存することが最善です。私の推測では、あなたの質問で言及した4秒は、あるノードから別のノードへの最短経路を計算するためのものではなく、おそらく他のすべてのノードへの1つのノード、それのために、4秒それは完全に良い。引数を指定しないと(nx.shortest_path(G)など)、ノードの各ペア間の最短パスが計算されます。 nx。shortest_path(G、node1)は、node1と他のすべてのノードとの間の最短経路を計算し、nx.shortest_path(G、node1、node2)はnode1とnode2の間でのみ計算します。 –

+0

私のコメントはあなたを助けましたか?あなたはそうする必要はありませんが、時間を費やして助けてくれる人に返答するか、答えがあなたが探していたものであれば回答を受け入れるのは良い方法です。 –

関連する問題