2

私は、ユーザーがポイントAからポイントBへの旅行を検索できるようにするアプリケーションに取り組んでいます。次のユースケースを解決する必要があります。

  1. ポイントAからポイントBに行く旅行を見つける
  2. 他の地点から始まる旅行を見つけますが、地点Aから地点Bに移動します

私は今、そのようなユースケースをサポートするのに最適なデータベースソリューションを探しています。

今のところ、MongoDBを使用しています。しかし、最初のユースケースの回避策を理解する必要があり、2番目のユースケースをそれで解決することは不可能であると感じています。

空間機能をサポートする利用可能なすべてのnoSqldbは、ドキュメント、ノードなどの1つの地理空間インデックスのみを許可しているように見えます。これは、このポイントから半径5kmのすべてのショップを表示するなどのクエリに適しています。

だから私は両方のユースケースを解決できる解決策を探しています。そのようなものはありますか?

4

3 に答える 3

1

確かに、pgRoutingを使用できます。最初の解決策は、頭に浮かびます。最初のユーザーが旅行のソースと宛先としてニューヨークとコロンバスを入力したら、ルーティングクエリを実行し、パスをPostGISラインストリングジオメトリとして保存します。

2番目のユーザーがFrom:Pittsburgh To:Columbusを検索フォームに入力し、都市名を場所にジオコーディングし、PostGISクエリを実行すると、最初のユーザーのルートパスからそれらのポイント(または都市の境界)までの距離がわかります。彼らが十分に近く、最初のユーザーが適切な方向に運転する場合、彼らは車を共有することができます。

2番目のアイデア:最初のユーザーが旅行の詳細を入力した後、ルーティングクエリを実行し、ルートによって渡されるすべての地名をデータベースに保存します。

どちらのソリューションも、Postgres + PostGIS+pgRoutingを使用して簡単に実装できます。pgRoutingの最大の欠点は低速です(ルーティンググラフのデータを減らすことでパフォーマンスを向上させることができます。ルーティング速度はそれほど重要ではありませんなど)。道路データを外部ファイルにエクスポートすることも可能です。一部の高速ルーティングエンジン(OSRM、MoNavなど)を使用します。そして、必要に応じて、結果をPostGISに書き戻します。しかし、これには間違いなくはるかに多くの努力が必要です。

于 2012-11-19T19:17:42.160 に答える
1

また、データベースルートを回避することを選択した場合(しゃれは意図されていません)、GeoToolsグラフ化Javaライブラリを使用できます。

http://docs.geotools.org/latest/userguide/extension/graph/index.html

これは、使用方法を示すために自分で作成したコードとデータの例です。

http://usefulpracticalgeoblog.blogspot.ch/2012/09/geotools-routing.html

道路網グラフの作成に使用できる空間データ形式、および結果の出力方法に関しては、かなり柔軟性があります。

次に、トリップBの開始点がトリップAの事前に計算されたルートに近いかどうかを確認するにJTS (Java Topology Suite)は、GeoToolsライブラリの一部であるを使用できます。使用する可能性のある分析の例を次に示します。

https://gis.stackexchange.com/questions/7699/for-a-given-feature-find-the-closest-point-along-a-given-path

于 2012-11-26T14:27:26.667 に答える
0

postgisとpgroutingを使用したPostgresql。他に何も必要ありません。

于 2012-11-18T16:21:56.220 に答える