Работа с координатами на карте

Рейтинг: 2Ответов: 1Опубликовано: 06.09.2014

Здравствуйте уважаемые знатоки!
Вопрос из области тригонометрии.
Самолет летит из точки А в точку Б. У обеих точек есть координаты (долгота, широта):

$a['latitude'] = '95.971786120237';
$a['longitude'] = '47.251077912615';

$b['latitude'] = '75.971786120237';
$b['longitude'] = '22.251077912615';

Есть информация, сколько процентов пути пройдено.
Также есть данные о том, какое расстояние в метрах от точки А к точке Б.

Исходя из этих данных, нужно максимально точно вычислить координаты точки Х - где сейчас находиться самолет.

Простая арифметика, типа:

$x['latitude'] = $a['latitude'] - $b['latitude'] * на количество процентов + $a['latitude'];

и аналогично с longitude

не подходит, так как на длинных сегментах точность очень низкая, и отклонение от маршрута бывает слишком большое.

Подозреваю, нужно копать в сторону синусов, котангенсов, учитывать радиус земли и т.д.
Есть идеи? Заранее очень благодарен!

Ответы

▲ 2

Вот вам решение для случая, если считать Землю строго сферической.

Вы считаете расстояние по большому кругу по одной из этих формул. Поделив на радиус, получаете центральный угол между точками отправления и прибытия. Умножив на текущий процент, получаете центральный угол между точкой отправления и текущей позицией. Пусть этот угол α. Остаток угла пусть будет β.

Далее, вам нужно отложить от центра Земли вектор (обозначим его x) под нужным углом между двумя векторами: первый соединяет центр Земли с точкой отправления (пусть это будет a), а второй — с точкой прибытия (пусть это будет b). Это чистая геометрия на плоскости. Можете сделать, например, так.

Разложим вектор x по векторам a и b. Пусть x = pa + qb.

разложение векторов и теорема синусов, уроки Кушнира не прошли даром

Как учили на уроках геометрии:

pR / sin β == R / sin (α + β)

то есть

p = sin β/sin (α + β)

Аналогично

q = sin α/sin (α + β)

Дерзайте!