補間されたOSMポイントを使用した最短経路


8

OSMネットワークにスナップした一連のGPSポイントがあります。下のスクリーンショットでは、GPSポイントは赤、スナップされたポイントは緑です。 ここに画像の説明を入力してください

これらすべての緑のウェイポイントを含む最短経路を計算したいと思います。私の解決策は、ポイントの各ペア間の最短経路を計算し、最終的に結果を連結することです。

私の問題は、dijkstra_spがOSMネットワーク上の任意のポイントを受け入れないことです。スナップされたポイントは、次のロジックを使用して計算されたため、必ずしもウェイテーブルにあるわけではありません。

  1. 特定のGPSポイントに最も近い方法を見つけます。
  2. 補間を使用して、この方法でGPSポイントに最も近いポイントを見つけます。

スナップされたポイントは補間によって導出されたため、ウェイテーブルにはありません。

だから私の質問は次のとおりです:ウェイテーブルに必ずしもないOSMネットワーク上の2点間の最短経路を計算するにはどうすればよいですか?


あなたは巡回セールスマン問題を解決しようとしているように聞こえます。その場合、最も効率的な方法はTSPアルゴリズムを使用することです...
ntg

回答:


3

一時的なエッジと頂点で同じ問題を解決しました。GPS座標をv1からv2のエッジeにスナップし、0〜1のオフセットを得ました。

segOffset := line_locate_point(geom(e), Point(coords);

これで、新しいPoint()を作成し、これから新しい頂点v_tmpを作成しました。

line_interpolate_point(geom(e), segOffset);

次に、エッジe1を2つの新しいエッジe_tmp1からv1からv_tmpに、e_tmp2からv_tmpからv2に分割します。(4つの一時endgesに分割する必要があるかもしれません...)

私たちの目標でも同じことをしました。新しい頂点であるv_tmp_source、v_tmp_destを使ってpgroutingを始めたのはそれで終わりです。


2

私は最も近いノードと照合し、pgroutingを使用してこれらのノード間のルートを見つけました。私は合計距離の後にいたので、2つのポイントノード距離を追加しました。

許容できるようにするために、ノードがどれだけ近くなければならないかに上限がありました。

計算はより複雑/遅くなりますが、ノードではなくエッジに関して機能するpgroutingアルゴリズムを使用している場合は、エッジに対して同じことを実行できます。


(申し訳ありませんが、どういうわけか「winwaed」にコメントできないので、別の答えでそれを行わなければなりません)>数学はより複雑/遅くなりますが、次のようなアルゴリズムを使用している場合は、エッジに対して同じことを行うことができますノードではなくエッジに関して機能しました。Shooting Starアルゴリズムは、ノードではなくエッジを取ります。
dkastl 2011年

最も近いノードもエッジベースの手順も機能しません。以下の例を参照してください。 dl.dropbox.com/u/11502389/Screenshot2.png 青い線は、それぞれ緑のドットが上にあることの方法がされています。

1

あなたの問題は、私が数年前に解決しなければならなかったいくつかの同様のケースに私を覚えています。

これはあなたの赤いGPSポイントに似ているようです。これらのポイント間の最短経路を探すことができると想定したのと同じです。

ずいぶん前のことなので、詳細はもう覚えていません。しかし、pgRoutingの一部である「matching.sql」で関数を公開しました。ただし、ドキュメントはありません。そのために残念。しかし、おそらくSQLソースを読むと、それがどのように機能するかについていくつかのアイデアが得られます:https : //github.com/pgRouting/pgrouting/blob/master/core/sql/matching.sql


最も近いノードを使用しても機能しません。以下の例を検討してください。

このマッチング関数は、ノードと道路セグメントへのマッチングを組み合わせたものです。GPSポイントがノードにどれだけ近いかによって異なります。交差点に非常に近い場合、GPSポイントはエッジに近い可能性があり、実際には割り当てられません。
dkastl 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.