Как найти широту и долготу точки на плоскости, учитывая ее направление, широту и долготу? - PullRequest
0 голосов
/ 17 сентября 2018

Скажем, у меня есть самолет, летящий в точке на Земле. Модель Земли, которую я использую, имеет широту от -90/90 и долготу от -180/180. Самолет летит с широтой / долготой 80.123º и 170.123º и высотой 10000 футов, например, как на прилагаемом рисунке. Самолет также имеет курс, который является его углом с севера. На снимке угол чуть больше 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)))

diagram

1 Ответ

0 голосов
/ 17 сентября 2018

Я предполагаю, что Земля сферическая (с низкой ошибкой).

Рассмотрим сферический треугольник (плоскость, Северный полюс, пункт назначения) = 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 является курсом самолета (азимут).

Теперь с правилом сферического косинуса :

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

И вы можете получить координаты широты пункта назначения 90-ND.

На этот раз, используя правило сферического синуса :

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

Что дает абсолютную разницу в долготе между самолетом и пунктом назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...