1

我使用以下两种方法使用纬度和经度计算谷歌地图中两点之间的距离。

            TYPE I:
         function CalcDistanceBetween(lat1, lon1, lat2, lon2) {
//Radius of the earth in:  1.609344 miles,  6371 km  | var R = (6371 / 1.609344);
var R = 6371; // Radius of earth in Miles 
var dLat = toRad(lat2-lat1);
var dLon = toRad(lon2-lon1); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;
   alert("d==" + d);
return d;
}
  alert(CalcDistanceBetween(13.125511084202,80.029651635576,12.9898593006481,80.2497744326417));
                 function toRad(Value) {
            /** Converts numeric degrees to radians */
         return Value * Math.PI / 180;
         }  

    TYPE II:

            var p1 = new google.maps.LatLng(13.125511084202,80.029651635576);
            var p2 = new google.maps.LatLng(12.9898593006481,80.2497744326417);

            alert(calcDistance(p1, p2));

           //calculates distance between two points in km's
                       function calcDistance(p1, p2){
                return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) /                              
                  1000).toFixed(2);
                }    

以上两种类型的距离均为28 公里。但是当我检查具有相同经度和经度的谷歌地图时,它返回 36.8 公里。示例检查我的代码和谷歌地图如下所示..:在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

你建议我得到准确的结果吗?

4

2 回答 2

3

谷歌给出的距离是从建议的路线。这不是从 A 点到 B 点的直接路径。您计算的距离是直接路径,只有当您从 A 点直接飞到 B 点时才会出现这种情况。
如果您想获得 Google 输出的结果,请看这里:在 Google Maps API v3 中找到最短和最快路线的优雅方法?

于 2013-01-17T10:47:50.340 回答
1

可能是我完全弄错了:) 但似乎你的方法计算了这两个点之间的实际距离,当你用谷歌路由时,它是你所走路线的距离。

于 2013-01-17T10:49:28.890 回答