適切なルーティングエンジンの選択を支援する


16

ルートプランニングシステムを構築していますが、使用する基本的なルーティングエンジンを決定する必要があります。これまでのところ、私はpgroutingとneo4jを見つけました。

ルートネットワークはpostgresql / postgisデータベース(シェープファイルからインポート)にあります。ノードを抽出するためのクエリ(行き先または行き止まりの方向を決定する必要がある方法のエンドポイント)とエッジを抽出するためのクエリを作成しました(多くの場合、いくつかの連続した方法で構成されています)。私のエッジはすべて双方向です。

私の主な目標は、距離=コストのA-starアルゴリズムを使用して、このネットワーク上のルートを計算することです。

私の感じでは、neo4jのようなグラフデータベースを使用する方法があります(この目的のためだけに作成されているように思われます)が、デフォルトではA-starをサポートしていないようで、実際のジオメトリもありません。地図よりもソーシャルネットワークに適しているようです。

  • プラウティングは私のニーズを満たしますか?
  • オンザフライクエリ(+ -2000ノード、+-4000エッジ)に十分な速度ですか?通常、これはA-starの場合は数ミリ秒ですが、SQLでのこの実装についてはわかりません。
  • P-grouting A-starはノードとエッジのリストを提供しますか?
  • ほとんどの例でpgroutingについて見ると、通常はルートの計算後にコマンドのリストがあることに気づきます(「Xで左折など」)。pgroutingはこれを生成しますか、またはこれは別のシステムからのものですか?

誰かが私に選択するシステムに関する情報を提供してくれることを願っています。Neo4j、pgrouting、またはその他のシステム。


3
ほとんどのルーティングアルゴリズムは「ジオメトリの感覚」では動作せず、代わりにジオメトリ属性が計算され、コストとして使用されます(ポリラインの距離測定など)。私はNeo4jを使用したことはありませんが、本当に機能しているようで、すぐに使用する可能性があります。私はドキュメントを見ていたし、A-スターを使用することが可能になります。 docs.neo4j.org/chunked/stable/graph-algo.html docs.neo4j.org/chunked/stable/... pgRoutingも可能であり、私はそれの大ファンです。これら2つのソリューションのパフォーマンスを比較することは興味深いでしょう。
アラン・アデア

最初に、オープンソースの土地利用モデルであるurbansimをご覧になることをお勧めします。ルーティングの質問については、これがアプリケーションを計画している場合、機能とユーザーインターフェイスについて、まずTransCAD、CUBE、PLANAR、EMME / 2などのソフトウェアを調べることをお勧めします。通常、ソフトウェアのデモCDを1時間または2時間配布します(1時間または2時間実行して、その感覚をつかむことができます)。オンライン用またはデスクトップ用に何かを構築したい場合は、pgRoutingをご覧ください。ただし、経験から、ワークショップ/チュートリアルでの描写ほど簡単ではない場合があります。
dassouki

私はa-starの働きでpgroutingを得ました、それは素晴らしいです!最初の3つの質問でyesと答えます。それでも、ここの誰かが詳細なナビゲーション指示の生成について何か知っているのだろうか。計算されたルートの出力から詳細な指示(「200m左折後」など)を生成するpgroutingと連携するツールはありますか?
mrg

回答:


8

私は現在、あなたと同じ問題を調査論文の目的で調査しています。これら2つのデータベースのテストを開始する前に、私はあなたと同じ推測をしていました。そのNeo4jグラフデータベースは、この種の問題に対する完璧なソリューションになります。部分的にはそうですが、多くの問題があります。

最初の問題は、A-StarがREST API(サーバー)経由ではなく、埋め込みデータベースを使用している場合にのみ実装されることです。Neo4jをREST APIで使用する場合、Dijkstraアルゴリズムのみがサポートされます。2番目の問題は、Neo4jのハードウェアメモリ要件です。「より大きな」ネットワーク上のルーティング(Dijkstra)には、大量のRAMが必要です。大規模ネットワークの場合、ドイツOSM道路データベースのサイズのようなものを意味します。6GB RAMサーバーでテストを実行しました(現在はこれで全部です)。OutOfMemory例外エラーなしでルーティングできるのは小規模なネットワークのみです。私のテストケースの「小規模」ネットワークは、たとえば、オーストリアまたはクロアチアのOSM道路データベースです。同時クエリは、私はまだNeo4jでテストしていません。

これらの問題はすべてpgRoutingには存在しません。メモリはそのような問題ではありませんが、同時クエリは必要なメモリ量を増やします。たとえば、2つの同時要求がある場合、2倍の量のメモリが必要です。これはドイツOSMデータセットでも問題ではなく、すべての同時リクエストで問題なくルーティングされたpgRoutingです。

パフォーマンス:ほとんどの場合、Neo4jはpgRoutingよりも優れています。ただし、指定されたデータセットに十分なメモリがあり、すべてのノードと関係がメモリ内にある場合(ホットスタート)のみ。パフォーマンスの増減は多くの要因に依存しますが、ほとんどはネットワークのサイズとソースノードとターゲットノード間の距離(ホップ)に依存します。

ネットワークのサイズは非常に小さいため、メモリに問題はありません。おそらくNeo4jは悪い選択ではありませんが、標準のリレーションデータベースよりも「小さな」異なるデータモデルに適応する必要があります。

質問に答えるには:

  • pgRoutingでは、すでに実装されているSQLでのAStarの実装について心配する必要はありません。
  • はい、pgRoutingはノードとエッジのリストを提供します
  • pgRoutingがそのような情報を、クエリに関するカスタム作業なしで提供できるとは思いません。しかし、多分私は間違っている、多分誰かがこれをして、この質問についてあなたをもっと助けることができるかもしれない。

直接役立つかどうかはわかりませんが、私が見つけた最速のルーティングサーバーの1つはosm2poです。OSMデータセットで動作し、非常に高速です。現在実装されているのはdijkstraだけですが、開発者はAStarも発表しました。これのいくつかがあなたを助けることを願っています。:)


両方のシステムを実際にテストしたことがある人の話を聞くのは良いことです。一方、私はpgroutingでより多くの経験をしています。pgroutingはクエリごとにグラフ全体を構築し、大規模なネットワーク(ドイツのサイズ)ではかなり遅くなることに気づいたので、pgroutingがNeo4jよりも少ないメモリで済む理由がわかりません。私の次の試みは、RAMでグラフ全体を静的にし、その上で(neo4j、nx_spatialなどを使用して)ルーティングして、リアルタイムルーティングの応答を高速化することです。
mrg

はい、グラフが大きいほど、pgroutingとneo4jの違いが大きくなります。おそらく、それが最速のソリューションであるよりもグラフ全体をメモリに入れた場合、それについては疑いの余地はありません。Neo4jは、すべてのグラフがメモリにロードされると非常に高速です。nx_spatialについては知りません。テストしていませんが、おそらくそうするでしょう。Neo4jよりも優れていると思います。しかし、このソリューションは、アプリケーションに受け入れられる場合に適しています。
マリオミラー

1
@mrgは、それがまだあなたにとって問題であるかどうかはわかりませんが、OSRM(C ++)とGraphHopper(Java)があります。世界規模のグラフへのスケーリングと、たとえばGraphHopperがドイツ(私が筆者である)の1ギガバイト未満のニーズ
Karussell

Karussell、情報をありがとう!OSRMはすでに見つかりましたが、GraphHopperは私にとって新しいものです。
mrg

0

RW Net 4パッケージ(www.routeware.dk)もご覧ください。SHPファイルから直接A *を使用して、このような最短パス計算を実行できます。500ユーロのベーシックパッケージは、ニーズに十分なようです。


迅速な対応に感謝しますが、私のプロジェクトはまだ段階にあり、今すぐにお金を使う必要があるかどうかはわかりません。また、データの処理をpgroutingで行ったため、現時点では不明な部分に取り組んでいます。
-mrg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.