0

我有一个很长的问题,我希望一个或多个人可以提供帮助。我在网上找到的一个函数有问题,给定两个纬度和经度坐标,可以找到两者之间的距离。功能如下:

    <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 代码)每次从手机运行网页时都会插入稍微不同的坐标……即使手机根本没有移动。

1.有没有人知道另一个 javascript/jquery/whatever 可以在客户端获得用户的经纬度并且实际上是准确和一致的?

我还试图找到两个纬度和经度值之间的距离,即 lat1、long1、lat2、long2。我发现了许多 php 计算,这些计算应该只是通过一个函数简单地通过 lat1,long1,lat2,long2 并返回以米为单位的距离,但是每次,当两个设备几乎相同时,它都会返回一个超级大的数字调用网页时,纬度和经度坐标并排在一起。以下是一些我发现只是没有返回正确值的 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