2016-05-18 25 views
0

私は、ライン上にある2つの座標のセットの間に補間ポイントを見つける必要があります。緯度と経度の座標を補間する方法

private static List<Coordinate> SampleLine(Coordinate start, Coordinate end, int Samples) 
    { 

     List<Coordinate> LineStringSample = new List<Coordinate>(); 
     // Calculate equal interval between two points 
     var diff_X = start.X - end.X; //latitudes 
     var diff_Y = start.Y - end.Y; //longitudes 
     var length = Math.Sqrt(diff_X * diff_X + diff_Y * diff_Y); 
     var interval_X = diff_X/length; 
     var interval_Y = diff_Y/length; 

     Coordinate last = start; 
     for (int i = 1; i <= Samples; i++) 
     { 
      LineStringSample.Add(new Coordinate(start.X + interval_X * i, start.Y + interval_Y * i)); 
     } 
    } 

どこ例えばstart = (49.13512,6.4321) end = (49.13515,6.4333) Samples=1000ため、基本的には緯度と経度の座標である:私は考えていた 擬似C#コードは、このです。 これがポリラインの2つの座標点を補間する正しい方法かどうか、またはこれを行う別の方法があるかどうかを知る必要がありますか?

答えて

1

この補間は正確ではなく、座標の差が大きくなるとエラーが増加します。それはあなたの例のような小さな行にはまだ適しているかもしれません。

より良いアプローチ - 大きな円弧で補間点を見つける。 「中間点」の部分にhereを見てください。

Formula: 
a = sin((1−f)⋅δ)/sin δ 
b = sin(f⋅δ)/sin δ 
x = a ⋅ cos φ1 ⋅ cos λ1 + b ⋅ cos φ2 ⋅ cos λ2 
y = a ⋅ cos φ1 ⋅ sin λ1 + b ⋅ cos φ2 ⋅ sin λ2 
z = a ⋅ sin φ1 + b ⋅ sin φ2 
φi = atan2(z, √x² + y²) 
λi = atan2(y, x) 
where 

f is fraction along great circle route (f=0 is point 1, f=1 is point 2), 
δ is the angular distance d/R between the two points. 
関連する問題