如何计算两个地方之间的航空距离?


17

很多时候,我正在寻找一种方法来计算两个地方(通常是市中心)之间的航空距离。

例如,当我从苏黎世飞往赫尔辛基时,我想知道它有多远。使用Google Maps,我可以做到,但不能达到航空距离。

那么,有没有人知道执行此操作的工具,或者可以给我一些有关如何使用地理坐标手动执行操作的建议?然后,我可以编写自己的小工具。


1
在两个小型机场之间旅行时,仅通过遥远的枢纽来完成航空距离是否有意义?
mouviciel 2011年

1
显然不是……
RoflcoptrException 2011年

3
次要思想:较小的飞机是否必须在发动机故障的情况下保持在一定距离内?我以为我看到一个网站这么说。如果是这样,那么大的圆距离并不总是准确的。
barrycarter 2011年

@barrycarter:由于各种原因,飞机会偏离最短路径,例如避免暴风雨和使用喷气流更快。因此,甚至不可能总是事先知道。
Michael Borgwardt

您已经有了一个全面的答案,因此现在尚无定论,但“航空公司”显然引起了一些混乱。我怀疑您的意思是Luftlinie,在这种情况下,“直线”,“直线”或“乌鸦飞”会是用英语表达的更惯用的方式。
2014年

Answers:


18

这些计算的最佳位置是“ Great Circle Mapper”网站。

http://www.gcmap.com/

要查找两个或多个机场之间的距离,只需输入它们之间的破折号即可。例如,JFK-DFW或SFO-IAD-LHR

您可以一次用逗号分隔多个旅程。JKF-DFW,SFO-IAD-LHR


请注意,这些值是飞机在机场之间实际行驶距离的下限。
ESultanik

请注意,在欧盟航班延误/取消条例(EC)261/2004中:“第1段和第2段中给出的距离应通过大圆弧路线方法进行测量。”
chx

13

对于所有推荐使用Great Circle数学的回答者,您只是部分正确。

球体上两点之间的距离由GC Maths确定,但是OP特别要求提供空中距离。这是通过首先找到在到达目的地的途中访问的所有点,然后计算所有路径对的GC距离来找到的。

例如,从伦敦到纽约的飞行不遵循两点之间的大圆路径。它遵循一组点,其中可能包括导航点,航路点,航空,出发路线,到达路线,经纬度/经度定位和范围方位点。有关更多信息,请参见飞行计划

因此,您需要联系所涉及的航空公司,很好地询问所使用的飞行计划,并找到所访问的每个点的经纬度。


这正是我的想法!
Ankur Banerjee

1
我相信OP确实在询问长圆距,“ air-line”在这里代表德国的“ Luftlinie”,与“ airlines”无关。
2014年

11

许多航空公司在其日程安排中都包含此信息。例如,加拿大航空可让您下载其整个时间表的PDF。这里有一个片段:

在此处输入图片说明

我建议搜索您打算使用的航空公司的网站。任何基于城市实际距离的工具都可能与航空公司的距离相差20-30英里。


目录中的距离(对于飞行常客等)通常与GCMap提供的最佳大圆距离相同。实际距离变化从白天到基于风,空中交通管制等天
lambshaanxy

7

如果要自己计算,则余弦球面定律可能是最简单的计算方法。它可能足够满足您的需求,并且非常简单。如果您希望在python中使用它,请尝试我的这段代码(您需要 calculate_distance_and_bearing

您可能还需要有关各个感兴趣的机场的位置信息。过去,我倾向于将“全球机场数据库 ”用于此类事情。


5

如果要对飞行进行此计算,则必须使用Gagravarr提到的余弦球定律。但是,如果您想编写自己的小工具并想在地图上画一条线,那会有些棘手。您将不得不使用Lambert投影图在其上从A到B绘制一条直线。Lambert保形圆锥投影的问题在于,这些贴图仅在两个参考平行线上是准确的,并且您离它们越远,它们的精确度就越低。这通常不是问题,并且在仅覆盖100x100公里的小型地图上会出现问题,但是地图越大,误差范围越大。这与地球是圆形的事实有关,您不能从圆形到平坦的表面进行精确的1:1映射。

Google地图(以及所有海图)都使用圆柱地图投影,这意味着您必须在地图上绘制曲线才能获得与在Lambert投影上使用直线相同的路线。





2

看到这里:http : //www.movable-type.co.uk/scripts/latlong.html

var R = 6371; // Earth's average radius in km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.