0

非常に長い質問があります。1 人または多くの人が助けてくれることを願っています。オンラインで見つけた、2 つの緯度と経度の座標を指定して、2 つの間の距離を求める関数に問題があります。機能は次のとおりです。

    <script>
         function handler(location) {
              var latitude = location.coords.latitude;
              var longitude = location.coords.longitude;
              document.getElementById('lat').value = latitude;
              document.getElementById('long').value = longitude;
         }
         navigator.geolocation.getCurrentPosition(handler);
   </script>

次に、隠しフィールドとともに下部にボタンがあります。

<input type="submit" id="button" name='submit' value="Bounce" onClick="handler(location)">
<input type='hidden' name='latitude'id="lat">
<input type='hidden' name='longitude'  id="long">

そのため、送信ボタンをクリックすると、関数が呼び出され、非表示フィールドの値が、送信時に PHP への投稿の緯度と経度に設定されます。ただし、この関数 (php および mysql コードと共に) は、電話から Web ページを実行するたびに、わずかに異なる座標を挿入します...電話がまったく動かされていなくても。

1.クライアント側でユーザーの緯度と経度を取得でき、実際に正確で一貫している別のjavascript/jquery/whateverを知っている人はいますか?

また、緯度と経度の 2 つの値、つまり lat1、long1、lat2、long2 の間の距離を見つけようとしています。関数を介してlat1、long1、lat2、long2を通過し、距離をメートル単位で返すだけでこの距離を見つけると思われる多くのphp計算を見つけましたが、2つのデバイスがほぼ同じである場合、毎回非常に大きな数を返します緯度と経度の座標であり、Web ページが呼び出されるとすぐ隣り合っています。以下は、正しい値を返さないことがわかったいくつかの php コードです。

function distanceGeoPoints ($lat1, $lng1, $lat2, $lng2) {
    $earthRadius = 3958.75;
    $dLat = deg2rad($lat2-$lat1);
    $dLng = deg2rad($lng2-$lng1);
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *sin($dLng/2) *    sin($dLng/2);
    $c = 2 * atan2(sqrt($a), sqrt(1-$a));
    $dist = $earthRadius * $c;
   // from miles
    $geopointDistance = $dist;
    return $geopointDistance;
}

function vincentyGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo){
    // convert from degrees to radians
    $earthRadius = 6371000;
    $latFrom = deg2rad($latitudeFrom);
    $lonFrom = deg2rad($longitudeFrom);
    $latTo = deg2rad($latitudeTo);
    $lonTo = deg2rad($longitudeTo);
    $lonDelta = $lonTo - $lonFrom;
    $a = pow(cos($latTo) * sin($lonDelta), 2) + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
     $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);
     $angle = atan2(sqrt($a), $b);
     return $angle * $earthRadius;
}

2.他の誰かがこの問題を抱えていたり、私が間違っていることを知っているかもしれませんか? これらの計算は負の緯度または経度の値を受け入れませんか? 3.うまくいけば私がまだ聞いていないphp関数を知っている人はいますか?

これは非常に長い投稿でしたが、私が質問した部分について助けていただければ幸いです.

ありがとう!

4

0 に答える 0