【问题标题】:How do I find the latitude and longitude of a point from a plane given the plane's heading, latitude, longitude?给定飞机的航向,纬度,经度,如何从飞机上找到一个点的纬度和经度?
【发布时间】:2019-02-20 20:17:55
【问题描述】:

假设我有一架飞机在地球上的某个点飞行。我使用的地球模型的纬度从 -90/90 开始,经度从 -180/180 开始。飞机在 80.123º 和 170.123º 的纬度/经度以及 10,000 英尺的高度飞行,例如附图中所示。这架飞机还有一个航向,即它与北方的角度。在图片中,角度略大于 180º,因此它正在远离北极。现在,我想从这个平面上找到一个点的纬度和经度。我得到一个距离 d,它是平面和点之间的距离,它应该是平面指向的方向(航向)。我也得到了这一点的高度。鉴于飞机的任何纬度/经度/高度/航向,有人可以帮我找到一个可以用来计算该点的纬度/经度的公式吗?非常感谢。

    #EDIT: Below is my conversion of Vitor's calculations to a Python script

    r_earth = 3440 #earth radius in nautical miles
    h_plane = 1.645788 #plane flying at 10000 ft in nautical miles
    h_dest = 0
    P = 90 #flying 90 degrees from North, so towards Florida
    #lat,long of the center of Texas = 31.005753,-99.21390 
    d = 10 # point is 10 nautical miles away
    PN = 58.994247 #latitude = 90 - PN
    longitude = -99.21390 
    r_plane = r_earth + h_plane
    r_dest = r_earth + h_dest
    PD = math.acos((r_plane**2 + r_dest**2 - d**2)/(2*r_plane*r_dest))
    ND = math.acos(math.cos(PN)*math.cos(PD) + math.sin(PN)*math.sin(PD)*math.cos(P))
    N = math.asin(math.sin(PD)*math.sin(P)/math.sin(ND))
    print(str(90 - ND) + "," + str(longitude + math.sin(N)))

【问题讨论】:

  • 你知道如何求飞机到点之间的角距离,从地心算起吗?
  • @Beta 您好 Beta,感谢您的意见。我会知道地球的半径、点的高度和飞机,所以我相信可以计算两个点之间的角度差,但我不确定,因为我的几何形状有点生疏。我相信飞机的航向不会改变计算中的角度差
  • 正确。 (你必须至少磨练你的三角函数技能,否则答案对你来说没有意义。)现在假设飞机在北极,你的航向是从本初子午线测量的(例如 -83 表示它正在前往俄亥俄州哥伦布市)。给定角距离,你能找到该点的纬度/经度吗?
  • @Beta 说飞机高度为 10,000 英尺(即 1.65 海里),该点的高度为 0(地球表面),飞机与点之间的距离 d 为 10 海里(斜边)。现在我有一个直角三角形,所以我可以找到地球表面上两个点之间的距离(不考虑地球的曲率)。我计算它是 99.986 nm。现在使用弧长公式 (length = (theta/360º) * (2pi * r)),其中 r 是地球的半径 (3440 nm),theta 是两个点与地球中心的夹角。跨度>
  • @Beta 插入所有内容我得到 theta = (99.986 nm/2pi * 3440 nm) * 360º = 1.67º。但是现在我知道了这一点,我有点迷失从这里去哪里。我如何考虑飞机的航向?

标签: math geometry latitude-longitude


【解决方案1】:

我假设地球是球形的(误差很小)。

考虑球面三角形(平面、北极、目的地)= PND。

首先,使用(平面)余弦规则将距离d 转换为平面与其目的地之间的球弧:

r_plane = (r_earth + h_plane)
r_dest = (r_earth + h_dest)
cos(PD) = (r_plane^2 + r_dest^2 - d^2)/(2*r_plane*r_dest)

注意

  1. 90-PN 是飞机的纬度,并且
  2. P 处的角度是飞机的航向(方位角)。

现在,Spherical Cosine Rule

cos(ND) = cos(PN)*cos(PD) + sin(PN)*sin(PD)*cos(P)

并且可以得到目的地的纬度计算90-ND

这一次,使用Spherical Sine Rule

sin(N) = sin(PD)*sin(P)/sin(ND)

这给出了飞机与其目的地之间经度的绝对差。

【讨论】:

  • 嗨@Vitor,谢谢你的回答。我将其转换为 python 脚本,飞机的纬度/经度为 31.005753,-99.21390,它位于德克萨斯州的中心,高度为 10000 英尺,航向为 90 度(因此飞往佛罗里达)。该点距离 10 海里,高度为 0。但是,当我打印新的纬度/经度时,我得到 87.5531402313,-99.2098967929,它不是指向佛罗里达,而是指向北极。你知道我是否在我的脚本中犯了错误吗?我把它贴在下面。谢谢
  • 我已将我的 Python 脚本添加到原始问题中。如果我在脚本中犯了错误,请告诉我。谢谢!
  • 不客气!你明白了:当我回答时,我想到了 python 代码。但请注意,python 的三角函数适用于弧度,因此您需要从度数和度数转换。最后,对于逆的共域,考虑以下通常很有用: print(degrees(acos(x)), 360-degrees(acos(x))) print(degrees(asin(x)), 180-degrees(asin (x)))
  • 明白了,现在说得通了。谢谢!
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多