8

Googleマップで緯度/経度座標を使用しています。

私は2行あります:

  • ライン A : 48.31508162629726、-2.591741396838972 ~ 48.40216156645915、-2.2218462112093404
  • ライン B : 48.383816077371215、-2.274292940053768 ~ 48.66103546935337、-1.7066197241571377

次に、次の式を使用して、それらが交差する点を見つけます。

var XAsum = A.LngStart - A.LngEnd;
var XBsum = B.LngStart - B.LngEnd;
var YAsum = A.LatStart - A.LatEnd;
var YBsum = B.LatStart - B.LatEnd;

var LineDenominator = XAsum * YBsum - YAsum * XBsum;
if(LineDenominator == 0.0)
    return false;

var a = A.LngStart * A.LatEnd - A.LatStart * A.LngEnd;
var b = B.LngStart * B.LatEnd - B.LatStart * B.LngEnd;

var x = (a * XBsum - b * XAsum) / LineDenominator;
var y = (a * YBsum - b * YAsum) / LineDenominator;

これは、線が実際に交差し、x と y の値を返すことを示しています。

ただし、返されたポイントをプロットすると、実際の交点からオフセットされます (それほどではありません)。

正しい交点を返す、より優れた高速アルゴリズムを使用できますか?

多数の行(〜1000)を反復処理しているため、高速である必要があります。

編集:これにより、約7.5メートルのエラーオフセットが発生することに注意してください

4

1 に答える 1

4

あなたが使用しているアルゴリズムは、デカルト座標系 (つまり、平面) で線の交点を見つけるためのものだと思います。残念ながら、地球は平面 (または球体) ではないため、そのアルゴリズムを使用するとエラーが発生します。Google マップは楕円体 (具体的には WGS84) を使用して地球の表面を概算するため、楕円体上の円弧の交点を見つけるアルゴリズムが必要になります。

このページには役立つ情報が含まれている可能性があります: http://mathhelpforum.com/calculus/90196-point-intersection-two-lines.html

于 2012-07-25T16:49:40.417 に答える