私は緯度と経度の2つのペアを取り、距離をm単位で返す関数を持っています。 JavaScriptの同じ関数のデータの複数のフォーマットを処理する方法
function distance(lat1, lon1, lat2, lon2){
var p = Math.PI/180;
var c = Math.cos;
var a = 0.5 - c((lat2 - lat1) * p)/2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p))/2;
return 12742 * Math.asin(Math.sqrt(a)) * 1000; // 2 * R; R = 6371 km
}//Distance
私は緯度と経度のための複数のソースを持っていると私はそれらを処理する方法を知っていただきたいと思います(私はこの関数を作成するが、SOに別の質問からそれを得なかった注意してください)。 Iは
フォーマットでデータを返す 三つの異なるフォーマットからIは、入力を処理する関数を使用したい{latitude: 0000, longitude:0000}
を
navigator.geolocation.x
を||
var distanceFromTarget = distance(
target.latitude || target.lat || target.lat(),
target.longitude || target.lng || target.lng(),
current.latitude || current.lat || current.lat(),
current.longitude || current.lat || current.lng()
);
を使用してプラグインを試し返信
{lat: 000, lng: 000}
と、このような緯度とLNG何かのためにゲッターを含む場所の複雑なオブジェクトを返すGoogleマップAPI:私は3つすべてを扱うことができる方法
location = {lat(){return latitude}, lng(){return longitude}}
?私は上記のことが働いていたと思ったが、今はそうではないことは明らかである。場所が形式target.lat()
の場合、距離はNaNを返します。また、前のものが定義されていなかった場合、次のオブジェクトを単に使用すると思っていたので、誰かがどのようにして動作するのか説明できればいいです。
'||'は短絡演算子です。つまり、最初のケースが真であれば残りはこの場合評価されません。 – Aaron
私はあなたのコードをテストし、うまくいきました。第4引数では小さなエラーがあります: 'current.lng'ではなく' current.lat'です –
これを発見してくれたChrisに感謝します。それはソリューションではないようだが、Googleマップの結果からデータを使用したとき、私は距離としてNaNを取得していました。私は演算子の順序を入れ替えます。つまり、 'target.lat'の前に' target.lat() 'を置くことで問題は解決したようです。私はそれが定義されているtarget.latを読み込んでいたと思うし、関数で返される値ではなく、関数の操作を実行します。私はまだプラグインのケースでそれをテストしていない。 – xerotolerant