获取用户的纬度和经度,并计算两个不同纬度和经度值的距离

时间:2013-02-25 06:11:45

标签: php javascript distance latitude-longitude

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

    <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 /什么可以在客户端得到lat和long用户并且实际上是准确和一致的?

我也试图找到两个纬度和经度值之间的距离,即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功能,希望我还没有听说过吗?

这是一个非常长的帖子,但对我提出问题的任何部分的任何帮助都将不胜感激。

谢谢!

0 个答案:

没有答案