Задать вопрос
@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

Конкретный пример можно глянуть тут. Выберите Муниципальное образование «Боброво-Лявленское» => ГБСУ АО «Трепузовский психоневрологический интернат». В консоле есть небольшой лог.
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 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
Мне кажется, Яндекс.Карты используют такую проекцию, чтобы отображаемый участок не искажался.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы