【发布时间】:2017-03-14 11:07:06
【问题描述】:
我试图找到一种更好的方法来计算谷歌地图上两点之间的距离,但结果不是我所期望的。
例如,我在这里找到的这两个解决方案:Calculate distance between two points in google maps V3 是相似的(它产生大约 249.3424456 公里 - 但它是错误的,因为巴克乌和布加勒斯特 - 罗马尼亚 - 之间的距离大约是 300 公里)。
plnkr 链接:http://plnkr.co/edit/cv25C6pga0lla7xyBDRO?p=preview
或者:
$( document ).ready(function() {
var myLatLng = new google.maps.LatLng({ lat: 46.5610058, lng: 26.9098054 });
var myLatLng2 = new google.maps.LatLng({ lat: 44.391403, lng: 26.1157184 });
var calc1 = google.maps.geometry.spherical.computeDistanceBetween(myLatLng, myLatLng2)/1000;
console.log('calc1 = ' + calc1);
var start = { lat: 46.5610058, lng: 26.9098054 };
var stop = { lat: 44.391403, lng: 26.1157184 };
var rad = function(x) {
return x * Math.PI / 180;
};
var getDistance = function(p1, p2) {
var R = 6378137; // Earth’s mean radius in meter
var dLat = rad(p2.lat - p1.lat);
var dLong = rad(p2.lng - p1.lng);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) *
Math.sin(dLong / 2) * Math.sin(dLong / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d; // returns the distance in meter
};
var calc2 = getDistance(start, stop)/1000;
console.log('calc2 = ' + calc2);
document.getElementById("test").innerHTML = 'calc1 = ' + calc1 + '<br/>calc2 = ' + calc2;
});
当我尝试使用 google maps web api http://maps.googleapis.com/maps/api/distancematrix/json?origins=46.5610058,26.9098054&destinations=44.391403,26.1157184 计算这些距离时,它告诉我距离是 299 公里(这是一个很好的价值 - 巴考和布加勒斯特 - 罗马尼亚之间的距离 - 大约 300 公里)。
我更喜欢在本地计算而不是每次访问一个网站,但为什么当我使用 'google.maps.geometry.spherical.computeDistanceBetween' 函数或 Haversine 公式时它计算出错误的值?
【问题讨论】:
-
我的看法是,前两种方法(computeDistanceBetween 和 Haversine 公式)计算的是空中直线距离,而不是陆地道路上的距离。
标签: javascript math google-maps-api-3