Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从长lat线段到长距离的距离错误_Javascript_Geometry_Geocoding_Geospatial_Google Earth - Fatal编程技术网

Javascript 从长lat线段到长距离的距离错误

Javascript 从长lat线段到长距离的距离错误,javascript,geometry,geocoding,geospatial,google-earth,Javascript,Geometry,Geocoding,Geospatial,Google Earth,我在计算一个点离地球上的线段有多远 我的功能似乎起作用了,但随着距离的增加,它显然不起作用了。我想这是由于地球的曲率造成的 在我的计算中,罗马距离线路5km: 伦敦,英国-0公里 意大利罗马-5公里 利比亚塞勒内-0公里 但在谷歌地球上,它实际上更像是61公里 当我开始走更长的距离时,计算结果会变得更糟 意大利罗马-0公里 巴基斯坦莫亨乔达罗-0公里 土耳其伊斯坦布尔-250公里 我相信问题出在这里的代码中: function distToSegment(lat1, lon1, la

我在计算一个点离地球上的线段有多远

我的功能似乎起作用了,但随着距离的增加,它显然不起作用了。我想这是由于地球的曲率造成的

在我的计算中,罗马距离线路5km:

  • 伦敦,英国-0公里
  • 意大利罗马-5公里
  • 利比亚塞勒内-0公里
但在谷歌地球上,它实际上更像是61公里

当我开始走更长的距离时,计算结果会变得更糟

  • 意大利罗马-0公里
  • 巴基斯坦莫亨乔达罗-0公里
  • 土耳其伊斯坦布尔-250公里

我相信问题出在这里的代码中:

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;
}
这是一把可以用来测试的小提琴:

如果您能帮我解决这个问题,我们将不胜感激

这个

bearing1 = 360 - (bearing1 + 360 % 360)
我觉得很可疑。你是说

bearing1 = 360 - (bearing1 + 360) % 360
?

同样适用于轴承2


%
是一个乘法运算符,其优先级高于
+

可能需要尝试基于哈弗斯线(半对正弦)的公式来计算两点之间的距离。JavaScript代码在“是”处提供。在一些地方,此distToSegment似乎是错误的。经过尝试,没有区别:(