(大円)パス上のプロジェクトの場所


9

私はこのSEサイトをかなりの時間検索してきましたが、それでも私の質問の解決策を見つけるのに苦労しています。私の目標は、OSMの方法と私の場所(緯度/経度座標)を考慮して、その方法で最も近い場所(緯度/経度座標)を見つけたいということです。ポイントは、ウェイを定義するために使用されるポイントに限らず、ウェイ上のどこにでも置くことができます。

だから私は次のアルゴリズムを考えています:

  1. パスを別々のエッジに分離し、各エッジは2点のみを接続します。
  2. 最も近いエッジを選択します。
  3. 私の場所をその端に投影します。

ここで、場所とパスの間の距離の計算について多くの質問があります。

また、非常によく似た質問で、計算を正しく行うことも検証することもできません。

その主題についての数学博士からのいくつかの情報もあります。しかし、手順3で位置を計算するアルゴリズムを見つけることができないようです。(ベクトル)代数に触れていないので、これらの答えのロジックがよくわかりません。

誰かがこれを行うアルゴリズムを示すことができますか?適切なプログラミング言語での解決策は私には問題ありません。


1
他の質問の「拒否」には重要に思われるため、「自分の位置をその端に投影する」ことについて詳しく説明してください。突起が端にない場合があります。他の質問でも問題解決されていると思います。(よくやった、研究のため、BTW。)
マーティンF


@MartinFその質問は、ポイントからラインまでの距離を計算しますが、ライン自体の最も近いポイントは計算しません。
bouke

そこの溶液gis.stackexchange.com/a/23500/3195は、かかわら理解する多分難しいです。
マーティンF

ああ、ありがとう、ref noを更新しました。3.その特定の質問の「解決策」は、問題の分野の一般的な説明にリンクしています。十分に根拠のある数学者にはこれで十分かもしれませんが、私はその論文の数学を完全には理解していません。
bouke

回答:


7

地球の球体モデルを使用すると、適切な精度が得られ、単純で高速な計算が可能になります。

すべての座標を地球中心(3D)デカルト座標に変換します。たとえば、式

(cos(lon)*cos(lat), sin(lon)*cos(lat), sin(lat))

しましょう。(これは、地球の半径が1単位である距離メジャーを使用するため、便利です。)

始点にX0 =(x0、y0、z0)、終点にX1 =(x1、y1、z1)と書くと、大円が定義されます(X0がX1と異なり、2つが正反対ではない場合)。 UをX0とX1の正規化された外積とする。これは2つのステップで計算されます。

V = (xv, yv, zv) = (y0*z1 - z0*y1, z0*x1 - x0*z1, x0*y1 - y0*x1)

Vの長さは

|V| = sqrt(xv^2 + yv^2 + zv^2)

正規化は、Vを単位長に伸ばします。

U = (xu, yu, zu) = V / |V| = (xv/|V|, yv/|V|, zv/|V|).

任意の点X =(x、y、z)とこの大円の平面との間の方向付けられた3D距離は、XとZの内積であり、

d = X * U = x*xu + y*yu + z*zu

地表面上の距離の最も近い点、平面に最も近い点です。したがって、dの絶対値が最小になります。

図

この図は、球体上の2つの白い点と2000個のランダムな点によって決定された大円(黒)を示しており、その大円の平面までの絶対3D距離に応じて色と影が付けられています。つまり、| d |です。

最も近い点を見つけたら、まずそれを大円の平面(3D)に投影し、次にそれを半径方向外向きに地表面まで延長することで、大円に投影します。射影は単にd * Uを減算します。

X' = (x', y', z') = X - d*U = (x - d*xu, y - d*yu, z - d*zu).

放射状射影は、VがUに正規化されたのと同じ方法でX 'を単純に正規化します。

X'' = X' / |X'|.

(これは、| X '| = 0の場合に問題になります。これは、最も近い点が大円の極の1つである場合に発生します。この条件のコードにテストを含めて、可能であれば、個別に処理します。dの符号を使用して、どの極を識別するか。)

必要に応じて、通常の式を使用し X ''の座標を(lat、lon)に戻します


一つの質問。精度の観点から、X1とX0(大圏)を選択できる珍しくないケースを考えてみます。X1とX0を近接または離して選択する方がよい(X0がX1と異なり、 2つは正反対ではありません)?
user189035 2016年

1
@ user189035それらを90度離して選択します。それらが非常に近い場合、それらの外積は数値的に不確実です。減算には多くの相殺があり、有意な数値の損失につながります。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.