1

Google マップで使用する GPolyline を生成するために Douglas-Peucker ポリライン単純化アルゴリズムを使用しているさまざまなプログラミング言語の例を数多く見てきました。アルゴリズムは、平面図上のポリラインで表現される場合、ポイントとライン (他の 2 つのポイントを通過する) の間の距離の計算を含みます。

これまで見てきたすべての例は、単純に x と y を緯度と経度に置き換えるという単純な方法でアルゴリズムを適用しています。ポリラインが極に近づきすぎず、180°子午線を横切らない限り、ポリラインが非常に局所化されている限り、これは許容できる結果を生成する可能性がありますが、アルゴリズムのより一般的なバージョンを実装したいと思います。

したがって、私が間違っていなければ、点から球の表面の他の2つの点を通過する円までの、球の表面上の最短の弧の長さを計算する必要があります。その中心は球の中心(地球)。

この長さを計算する式を知っている人はいますか?

前もって感謝します

4

1 に答える 1

2

単位ベクトルpq、およびrですべてを表現しようとします。これらは、原点0を中心とする単位球Σ上の点と考えることができます。地球の半径で拡大することにより、それを地球上の量に変換できます。ここ に 背景 資料が あります.

qrを通る、 pから大円Cまでの大円距離dを求めます。 Cは平面Pと球Σの交点です。ここで、Pはqr、および原点0を通る平面です。 dは単にpPの間の角度 θ (ラジアンで表される)です。Pの法線ベクトルは、正規化された外積q × r /sinφ です。ここで、φ は間の角度です。qr

最終的には

θ = arcsin( p ⋅( q × r )/sinφ)

先ほど言ったように、ここにあるものはすべて地球の半径Rだけ拡大されます。したがって、3 つの点はR pR qR rであり、距離はR θ です。

ただし、最短距離の点/線の組み合わせを見つけることだけが必要な場合は、Rの乗算を省略できます。実際には、arcsin() を省略して、p ⋅( q × r )/sinφ の相対的なサイズを調べることができます。

于 2010-09-22T03:59:49.360 に答える