Клуб API Карт

Определение направления отрезка ломанной

Пост в архиве.

Здравствуйте.

 

Есть ломанная линия:

var myGeoObject = new ymaps.GeoObject({

geometry: {

                type: "LineString",

                coordinates: [

                    [55.80, 37.50],

                    [55.80, 37.65]

                ]

            },

Хочу получить значение направления от первой точки ко второй. Делаю так:

var startpt = myGeoObject.geometry.getCoordinates()[0];

var endpt = myGeoObject.geometry.getCoordinates()[1];

var dir = ymaps.coordSystem.geo.solveInverseProblem(startpt, endpt).endDirection;

 

Вывожу для теста:

alert(dir);

и получаю:

0.00108(ещё много цифр), 0.9999(ещё много цифр).

 

Дилетантский вопрос: Правильно ли я получаю направление? Если да, то как трактовать полученный ответ? Это какая-то угловая величина?

6 комментариев
Sergey Konstantinov
28 января 2016, 00:21
Это просто вектор [приращение первой координаты, приращение второй координаты], он безразмерый. Из него можно получить, например, азимут.

Спасибо за Ваш ответ. Приращение мне тоже пригодится.

 

А как получить азимут? Какая-то специальная функция для этого есть или всё считается по формуле из учебника?

Sergey Konstantinov
28 января 2016, 00:21
азимут = Math.PI/2 - Math.atan2(dir[0], dir[1]) (или dir[1], dir[0], в зависимости от порядка координат).
А что вы пытаетесь сделать?

Ещё раз спасибо за ответ.

 

Хочу нарисовать отрезок (AB) и в точку A поставить маркер (например значок трактора).

Зная постоянную скорость движения и длину отрезка, хочу сделать так, чтобы после нажатия на кнопку, маркер трактора переместился в ту часть отрезка, где он должен оказаться через 5 минут + перерисовать отрезок так, чтобы точка A была на новом месте положения маркера трактора.

Т.е. место положения маркера является началом отрезка, а сам отрезок - это марштут движения с игнорированием улиц и зданий на карте.

Sergey Konstantinov
28 января 2016, 00:21
solveInverseProblem(p1, p2).pathFunction(fraction) именно для этого и предназначен - передаёте пройденную долю пути, получаете среднюю точку. Через direction эту задачу решить нельзя - азимут непрерывно изменяется при движении.
Обратите внимание, вышесказанное актуально только для геодезических (geodesic: true) линий.

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

Спасибо, что подсказали правильное решение.