假设我有三个位置,即Kallang(A)、Paya-Lebar(B)和Bedok(C)。我试着做a->B+B->C,但距离总是让我回到a->C。为什么会这样??
kallang至paya-lebar(A-B)->2.5914199062350742 km
paya-lebar至贝多克(B-C)->4.4403012109180775 km
总(A-B-C)->7.03 km
卡尔朗至贝多克(A-C)->6.88公里
以下是我的代码:
var R = 6371;
var dLat = toRad(location3.lat()-location2.lat()) + toRad(location2.lat()-location1.lat());
var dLon = toRad(location3.lng()-location2.lng()) + toRad(location2.lng()-location1.lng());
var dLat1 = toRad(location1.lat());
var dLat2 = toRad(location2.lat());
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(dLat1) * Math.cos(dLat1) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
document.getElementById("distance_direct").innerHTML = "<br/><br/><br/>The distance between the five points (in a straight line) is: "+d +" km.";
}
function toRad(deg)
{
return deg * Math.PI/180;
}
我的加减运算语句有问题吗???感谢
您只需使用几何体库中内置的computeDistanceBetween方法
是的,问题是添加和减少相同的东西。由于toRad()
只是一个乘法,它与+和-相关,因此与相关
var dLat = toRad(location3.lat()-location2.lat())
+ toRad(location2.lat()-location1.lat());
与完全相同
var dLat = toRad(location3.lat()-location1.lat());
最后计算出第一个点和最后一个点之间的直线距离。
如果你正在使用谷歌地图JavaScript API V3,你可以加载几何库并执行以下操作:
var indirect_distance =
google.maps.geometry.spherical.computeDistanceBetween(location1, location2)
+ google.maps.geometry.spherical.computeDistanceBetween(location2, location3);