我使用以下两种方法来计算谷歌地图中使用纬度和经度的两个点之间的距离。
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 kms 作为距离。
但是当我以相同的经度和经度检查谷歌地图时,它返回36.8公里。
样本检查我的代码&谷歌地图显示如下......:
你建议我获得准确的结果吗?
答案 0 :(得分:3)
Google给出的距离来自建议的路线。它不是从A点到B点的直接路径。您计算的距离是直接路径,只有在您从A直接飞到B时才会出现这种情况。 如果您想获得Google输出的结果,请查看此处:An elegant way to find shortest and fastest route in Google Maps API v3?
答案 1 :(得分:1)
可能我完全弄错了:)但似乎你的方法计算这两个点之间的实际距离,当你用谷歌路线时,它就是你走的路线的距离。