Как найти ближайшую точку на отрезке линии от текущей точки на поверхности сферы (широта / долгота) - PullRequest
0 голосов
/ 10 апреля 2019

Например: Допустим, у нас есть какая-то прямая стена на карте Земли, и мы знаем координаты широты / долготы ее начальной и конечной точек:

wall.start.lat, wall.start.lon
wall.end.lat, wall.end.lon

А еще у нас есть какой-то объект:

object.lat
object.lon

Что мне нужно, так это найти ближайшую точку стены к этому объекту, если я пройду от этого объекта к стене на поверхности.

Это довольно легко решить в самолете, но я застрял со сферой.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Вы можете использовать Расстояние между точками сечение на этой длинной странице

 I’ve sometimes been asked about distance of a point from a great-circle path (sometimes called cross track error).

Formula:    dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R
where   δ13 is (angular) distance from start point to third point
θ13 is (initial) bearing from start point to third point
θ12 is (initial) bearing from start point to end point
R is the earth’s radius
JavaScript: 
var δ13 = d13 / R;
var dXt = Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12)) * R;
Here, the great-circle path is identified by a start point and an end point – depending on what initial data you’re working from, you can use the formulas above to obtain the relevant distance and bearings. The sign of dxt tells you which side of the path the third point is on.

The along-track distance, from the start point to the closest point on the path to the third point, is

Formula:    dat = acos( cos(δ13) / cos(δxt) ) ⋅ R
where   δ13 is (angular) distance from start point to third point
δxt is (angular) cross-track distance
R is the earth’s radius
JavaScript: 
var δ13 = d13 / R;
var dAt = Math.acos(Math.cos(δ13)/Math.cos(dXt/R)) * R;

и применять Точка назначения с учетом расстояния и пеленга от началаточка подход к получению координат точки

0 голосов
/ 10 апреля 2019

Я бы:

  1. Предполагая единичную сферу, вычислите векторы от центра до конечных точек сегмента
  2. Перекрестное произведение для получения нормали к плоскости, содержащей сегмент
  3. Нормализация длины и точечного произведения с точкой объекта, чтобы получить его расстояние от плоскости
  4. asin (), чтобы преобразовать это в расстояние вдоль поверхности к траектории большого круга сегмента
  5. умножьте на реальный радиус, чтобы получить соответствующие единицы

Вам также понадобятся расстояния между точкой объекта и конечными точками сегмента, если они окажутся ближе.

...