@DeboshiR
Свободу разработчикам!!!

Почему неправильно определяется угол наклона прямой?

На Яндекс.Картах рисую полигон по нескольким точкам. Границы полигона требуется сместить на 30 метров. Для этого беру две ближайшие точки и определяю их угол по отношению к оси X, к этому углу прибавляю 90 градусов и ставлю точку на расстоянии 30 метров с помощью solveDirectProblem() из Yandex.Maps API. Но проблема такая, что угол определяется неправильно.
Например:
Задаются 2 координаты: A = [64.364552, 41.057315] и B = [64.364229, 41.055964]. Угол считаю как Math.atan2(41.057315 - 41.055964, 64.364552 - 64.364229). Ответ получаю в радианах: 1.3361193770989723 или около 76 градусов. Хотя на глаз тут выходит около 45 градусов.

На скриншоте обведена прямая, образованная этими 2 точками.
qcmIa.jpg

Конкретный пример можно глянуть тут. Выберите Муниципальное образование «Боброво-Лявленское» => ГБСУ АО «Трепузовский психоневрологический интернат». В консоле есть небольшой лог.
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@AlexSku
Программист по автоматике
На скриншоте обведена прямая, образованная этими 2 точками

Инструмент "линейка": изменение высоты 40 м, длины 64 м. Отношение 0.625, арктангенс 35 градусов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@d0lph1n
Потому что в картографии используются проекции. Если Вы попытаетесь нарисовать геометрическую фигуру (дом, например) только по координатам, в районе экватора все будет отображаться как надо, но чем ближе мы смещаемся к полюсам, тем сильнее наша картинка "сплющивается" по вертикали. У вас 60-я широта, а это означает примерно 2-кратное сплющивание.

Даю фрагмент кода, чтобы поправить с учетом пропорций:
RAD2DEG = 180 / Math.PI;
PI_4 = Math.PI / 4;

/* The following functions take or return their results in degrees */

function y2lat(y) { return (Math.atan(Math.exp(y / RAD2DEG)) / PI_4 - 1) * 90; }
function x2lon(x) { return x; }

function lat2y(lat) { return Math.log(Math.tan((lat / 90 + 1) * PI_4 )) * RAD2DEG; }
function lon2y(lon) { return lon; }

Источник

Хотите пропорциональности - преобразуйте координаты при помощи lat2y и lon2x и считайте на основе того, что получилось при преобразовании.
Ответ написан
@Karpion
Мне кажется, Яндекс.Карты используют такую проекцию, чтобы отображаемый участок не искажался.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 окт. 2020, в 21:24
7000 руб./за проект
21 окт. 2020, в 20:16
400000 руб./за проект
21 окт. 2020, в 19:57
5000 руб./за проект