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

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

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

Сообщение arttry » 25 янв 2016, 13:54

Добрый день!

Собственно задача:
Есть небольшой сервис на 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 » 25 янв 2016, 14:09

А alpha то у вас в радианах?

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

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

Сообщение arttry » 25 янв 2016, 14:25

Перевожу :

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

 Math.sin(90*Math.PI/180)

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 25 янв 2016, 14:32

А в каких координатах считаем?

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

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

Сообщение arttry » 25 янв 2016, 14:59

Округляю до 5-го знака
Координаты LatLng(56.63392, 47.8757)

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

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

Сообщение freeExec » 25 янв 2016, 15:04

Хех, считаете в градусах, а применяете формулы в метрах. Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 25 янв 2016, 15:06

На карте рисую сегмент круга, знаю координаты центра (т.А), координаты т.В - точка лежащая на окружности, является центром сегмента, расстояние АВ и азимут. Круг небольшой 500м < R < 700м.
Координаты LatLng(56.63392, 47.8757)
А кто сказал, что это круг?

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

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

Сообщение arttry » 25 янв 2016, 15:11

Считаю, что круг, потому что размеры небольшие. Когда рассчитывал азимут, нормально прошло, построив прямоугольный треугольник.
Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.
Как это осуществить? :)
Новичок в этом деле...

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 25 янв 2016, 15:16

Когда рассчитывал азимут, нормально прошло
Потому что Меркатор
Как это осуществить?
http://proj4js.org/

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

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

Сообщение arttry » 25 янв 2016, 15:27

Спасибо! Буду разбираться. Теорию надо подтянуть)

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

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

Сообщение arttry » 25 янв 2016, 20:14

Похоже я что-то не понимаю.. :(
Перевел в 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
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 25 янв 2016, 20:21

И зачем? Переведи в UTM

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

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

Сообщение arttry » 26 янв 2016, 10:00

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

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

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 » 26 янв 2016, 11:53

Поменяйте порядок следования параметров в вызове forward(): сначала должна идти долгота, потом широта.
Ну и поделитесь, наконец, какие координаты вы ожидаете получить, чтобы народ не гадал.

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

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

Сообщение arttry » 26 янв 2016, 12:34

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

Ответить

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

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

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