OSM + leaflet поворот точки на заданный угол

Не знаете, где задать вопрос? Задавайте здесь.
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Добрый день!

Собственно задача:
Есть небольшой сервис на OSM + leaflet.
На карте рисую сегмент круга, знаю координаты центра (т.А), координаты т.В - точка лежащая на окружности, является центром сегмента, расстояние АВ и азимут. Круг небольшой 500м < R < 700м.

необходимо найти координаты точек начала и конца сегмента.

По сути задача сводится к повороту т.В относительно т.А на нужный угол.
Подставляю:

Код: Выделить всё

rx = Bx - Ax;
ry = By - Ay;
c = Math.cos(alpha);
s = Math.sin(alpha);
x = x + rx * c - ry * s;
y = y + rx * s + ry * c;
Получаются большие неточности...
Как решить задачу?
freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: OSM + leaflet поворот точки на заданный угол

Сообщение freeExec »

А alpha то у вас в радианах?
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Перевожу :

Код: Выделить всё

 Math.sin(90*Math.PI/180)
trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: OSM + leaflet поворот точки на заданный угол

Сообщение trir »

А в каких координатах считаем?
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Округляю до 5-го знака
Координаты LatLng(56.63392, 47.8757)
freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: OSM + leaflet поворот точки на заданный угол

Сообщение freeExec »

Хех, считаете в градусах, а применяете формулы в метрах. Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.
trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: OSM + leaflet поворот точки на заданный угол

Сообщение trir »

На карте рисую сегмент круга, знаю координаты центра (т.А), координаты т.В - точка лежащая на окружности, является центром сегмента, расстояние АВ и азимут. Круг небольшой 500м < R < 700м.
Координаты LatLng(56.63392, 47.8757)
А кто сказал, что это круг?
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Считаю, что круг, потому что размеры небольшие. Когда рассчитывал азимут, нормально прошло, построив прямоугольный треугольник.
Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.
Как это осуществить? :)
Новичок в этом деле...
trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: OSM + leaflet поворот точки на заданный угол

Сообщение trir »

Когда рассчитывал азимут, нормально прошло
Потому что Меркатор
Как это осуществить?
http://proj4js.org/
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Спасибо! Буду разбираться. Теорию надо подтянуть)
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Похоже я что-то не понимаю.. :(
Перевел в EPSG:3857 посчитал и вернул обратно.
Получились неверные координаты

Код: Выделить всё

var projection = '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs';

    var A = proj4(projection).forward([55.86350, 48.524084]);
    var Ax = A[1];
    var Ay = A[0];

    var B = proj4(projection).forward([55.86671, 48.52957]);
    var Bx = B[1];
    var By = B[0];

    var dX = Bx - Ax;
    var dY = By - Ay;

    var Dx = Ax + dX * Math.cos(45*Math.PI/180) - dY * Math.sin(45*Math.PI/180);
    var Dy = Ay + dX * Math.sin(45*Math.PI/180) + dY * Math.cos(45*Math.PI/180);
    
    var D = proj4(projection).inverse([Dy, Dx]);
    console.log(D);
    L.marker(D).addTo(map);
trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: OSM + leaflet поворот точки на заданный угол

Сообщение trir »

И зачем? Переведи в UTM
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Перевел. Координаты неверны

Код: Выделить всё

var projection = '+proj=utm +zone=39';
    
    var A = proj4(projection).forward([55.86350, 48.524084]);
    var Ax = A[1];
    var Ay = A[0];

    var B = proj4(projection).forward([55.86671, 48.52957]);
    var Bx = B[1];
    var By = B[0];

    var dX = Bx - Ax;
    var dY = By - Ay;

    var Dx = Ax + dX * Math.cos(45*Math.PI/180) - dY * Math.sin(45*Math.PI/180);
    var Dy = Ay + dX * Math.sin(45*Math.PI/180) + dY * Math.cos(45*Math.PI/180);
    
    var D = proj4(projection).inverse([Dy, Dx]);
    console.log(D);
    L.marker(D).addTo(map);
Что я делаю не так?
Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: OSM + leaflet поворот точки на заданный угол

Сообщение Ariki »

Поменяйте порядок следования параметров в вызове forward(): сначала должна идти долгота, потом широта.
Ну и поделитесь, наконец, какие координаты вы ожидаете получить, чтобы народ не гадал.
arttry
Новоприбывший
Сообщения: 9
Зарегистрирован: 25 янв 2016, 13:51
Репутация: 0

Re: OSM + leaflet поворот точки на заданный угол

Сообщение arttry »

Должен получить примерно: LatLng(55.86353, 48.53208)
Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость