4

緯度/経度の点から線までの距離を取得する必要があります。もちろん、グレートサークルに従う必要があります。

これに関するすばらしい記事をhttp://www.movable-type.co.uk/scripts/latlong.htmlで見つけました。

しかし、コードは正しく機能していません。私が何か間違ったことをしている、または何かが欠けている。これが問題の関数です。必要に応じて、他の機能のリンクを参照してください。

    var R = 3961.3
    LatLon.crossTrack = function(lat1, lon1, lat2, lon2, lat3, lon3) {
     var d13 = LatLon.distHaversine(lat1, lon1, lat3, lon3);
     var brng12 = LatLon.bearing(lat1, lon1, lat2, lon2);
     var brng13 = LatLon.bearing(lat1, lon1, lat3, lon3);
     var dXt = Math.asin(Math.sin(d13/R)*Math.sin(brng13-brng12)) * R;
     return dXt;
    } 

緯度/経度1 = -94.127592、41.81762

lat/lon2 = -94.087257, 41.848202

緯度/経度3 = -94.046875、41.791057

これは 0.865 マイルを報告します。実際の距離は 4.29905 マイルです。

これを修正する方法についての手がかりはありますか?私は数学者ではなく、歯のプログラマーに長けているだけです。

4

3 に答える 3

4

ほとんどの三角関数にはラジアンが必要です。角度の単位は度ですか? おそらく、通常の式を使用して変換する必要があります。

2*π ラジアン = 360 度

Haversine 式の式の下を見ると、次のように表示されます。

(三角関数に渡す角度はラジアンである必要があることに注意してください)。

于 2009-06-26T23:51:27.223 に答える
0

あなたの関数はこれらの座標に対して同じ値を返しますか:

crossTrack(0,0,0,1,0.1,0.5);
crossTrack(0,0,0,1,0.1,0.6);
crossTrack(0,0,0,1,0.1,0.4);

私はそうすべきだと思いますが、私のものはそうではありません。3 番目のポイントは、常に赤道から北に 0.1 です。結果に影響を与えるべきではない経度の変更のみ。そのようです。

于 2009-09-29T18:50:21.067 に答える