给定飞机的航向,纬度,经度,如何从平面上找到一个点的纬度和经度?
How do I find the latitude and longitude of a point from a plane given the plane's heading, latitude, longitude?
假设我有一架飞机在地球上的某个点飞行。我使用的地球模型的纬度从 -90/90 开始,经度从 -180/180 开始。这架飞机在 80.123º 和 170.123º 的 lat/long 和 10,000 英尺的高度飞行,如附图所示。这架飞机也有一个航向,这是它与北方的角度。在图片中,角度略大于 180º,因此它正飞离北极。现在,我想从这个平面上找到一个点的纬度和经度。我得到了一个距离 d,它是平面和点之间的距离,它应该在平面指向的方向(航向)。我也给出了这个点的高度。有人可以帮我找到一个公式,我可以用它来计算给定飞机的任何 lat/long/高度/航向的一般点的 latitude/longitude 吗?非常感谢。
#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)))
我假设地球是球形的(误差很小)。
考虑球面三角形(飞机、北极、目的地)= 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)
注意
90-PN
是飞机的纬度,
P
处的角度是飞机的航向(方位角)。
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)
这给出了飞机与其目的地之间的绝对经度差。
假设我有一架飞机在地球上的某个点飞行。我使用的地球模型的纬度从 -90/90 开始,经度从 -180/180 开始。这架飞机在 80.123º 和 170.123º 的 lat/long 和 10,000 英尺的高度飞行,如附图所示。这架飞机也有一个航向,这是它与北方的角度。在图片中,角度略大于 180º,因此它正飞离北极。现在,我想从这个平面上找到一个点的纬度和经度。我得到了一个距离 d,它是平面和点之间的距离,它应该在平面指向的方向(航向)。我也给出了这个点的高度。有人可以帮我找到一个公式,我可以用它来计算给定飞机的任何 lat/long/高度/航向的一般点的 latitude/longitude 吗?非常感谢。
#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)))
我假设地球是球形的(误差很小)。
考虑球面三角形(飞机、北极、目的地)= 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)
注意
90-PN
是飞机的纬度,P
处的角度是飞机的航向(方位角)。
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)
这给出了飞机与其目的地之间的绝对经度差。