0

「現在の地理位置情報」(navigator.geolocation.watchPosition を使用して取得した座標) と他の 10 個の (固定) 座標を同時に計算するにはどうすればよいですか?

距離を追跡したいので、「現在の地理位置情報」が特定の半径 1 の範囲内にある場合、座標 ==> 驚くべきことが起こります。

Haversine Distance Formula を使用してこの問題を解決できますか?

すべての計算は小さなエリア (都市) 内で行われるため、結果をキロメートルではなくメートルで取得する必要があります。

お時間をいただきありがとうございます。

/a。

4

2 に答える 2

0

赤道では、座標の小数点以下 5 桁 (0.00001) = 1.1057 メートルの緯度 & 1.1132 メートルの経度。

座標が赤道から極に移動すると、経度の値が減少します。

度| 緯度 | 経度
------------------------------
0° | 1.1057 メートル |1.1132 メートル
15° | 1.1064 メートル |1.0755 メートル
30° | 1.1085 メートル |0.9648 メートル
45° | 1.1113 メートル |0.7884 メートル
60° | 1.1141 メートル |0.5580 メートル
75° | 1.1161 メートル |0.2890 メートル
90° | 1.1169 メートル |0.0000 メートル

距離が短い場合は、ピタゴラスを使用して緯度を補正するか、Haversine を使用できます。

次のコードでは、Haversine を使用しています

var lat1 =55.00001;//Point 1 nearest
var lng1 =-2.00001  ; 
//var lat1 =55.00002;//Point 2 nearest
//var lng1 =-2.00002    ; 

//Array of points
var coordArray = [[55.00000,-2.00000],[55.00003,-2.00003],[55.00006,-2.00006],[55.00009,-2.00009],[55.00012,-2.00012]];

function toRad(Value) {
    /** Converts numeric degrees to radians */
    return Value * Math.PI / 180;
}

function Round(Number, DecimalPlaces) {
    return Math.round(parseFloat(Number) * Math.pow(10, DecimalPlaces)) / Math.pow(10, DecimalPlaces);
}
function haversine(lat1,lat2,lng1,lng2){
    rad = 6371000; // meters
    deltaLat = toRad(lat2-lat1);
    deltaLng = toRad(lng2-lng1);
    lat1 = toRad(lat1);
    lat2 = toRad(lat2);
    a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) + Math.sin(deltaLng/2) * Math.sin(deltaLng/2) * Math.cos(lat1) * Math.cos(lat2); 
    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return  rad * c;
}
function calculate(){
    var result = haversine(lat1,coordArray [0][0],lng1,coordArray [0][1]);
    var index = 0;
    for (var i=1;i<coordArray.length;i++){ 
        var ans = haversine(lat1,coordArray [i][0],lng1,coordArray [i][1]);
        if (ans < result){
            result = ans;
            index++;
        }   

    }
    document.write("Result = " +Round(result,2)+ " Meters Point = "+ (index+1));
}

フィドルを見る

于 2013-10-20T20:10:40.913 に答える