我正在计算一个点距离地球上的一段线的距离。
我的功能似乎有效,但随着我增加距离,很明显它不起作用。我认为这是由于地球的曲率造成的。
在我的计算中,罗马显示为离线5公里:
但在谷歌地球上它实际上更像是61公里
当我开始走更远的距离时,计算会变得更糟!
我认为问题出现在代码中的某处:
function distToSegment(lat1, lon1, lat2, lon2, lat3, lon3) {
var y = Math.sin(lon3 - lon1) * Math.cos(lat3);
var x = Math.cos(lat1) * Math.sin(lat3) - Math.sin(lat1) * Math.cos(lat3) * Math.cos(lat3 - lat1);
var bearing1 = radiansToDegrees(Math.atan2(y, x));
bearing1 = 360 - (bearing1 + 360 % 360);
var y2 = Math.sin(lon2 - lon1) * Math.cos(lat2);
var x2 = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lat2 - lat1);
var bearing2 = radiansToDegrees(Math.atan2(y2, x2));
bearing2 = 360 - (bearing2 + 360 % 360);
var lat1Rads = degreesToRadians(lat1);
var lat3Rads = degreesToRadians(lat3);
var dLon = degreesToRadians(lon3 - lon1);
var distanceAC = Math.acos(Math.sin(lat1Rads) * Math.sin(lat3Rads) + Math.cos(lat1Rads) * Math.cos(lat3Rads) * Math.cos(dLon)) * 6371;
var min_distance = Math.abs(Math.asin(Math.sin(distanceAC / 6371) * Math.sin(degreesToRadians(bearing1) - degreesToRadians(bearing2))) * 6371);
return min_distance;
}
这是一个可以用来测试的小提琴:
http://jsfiddle.net/kmturley/cfg2D/3/
任何帮助来解决这个问题都将不胜感激!
答案 0 :(得分:1)
此
bearing1 = 360 - (bearing1 + 360 % 360)
对我来说很可疑。你的意思是
bearing1 = 360 - (bearing1 + 360) % 360
同样适用于bearing2
。
%
是一个乘法运算符,其优先级高于+
。