Страница 1 из 2
OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 13:54
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;
Получаются большие неточности...
Как решить задачу?
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 14:09
freeExec
А alpha то у вас в радианах?
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 14:25
arttry
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 14:32
trir
А в каких координатах считаем?
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 14:59
arttry
Округляю до 5-го знака
Координаты LatLng(56.63392, 47.8757)
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 15:04
freeExec
Хех, считаете в градусах, а применяете формулы в метрах. Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 15:06
trir
На карте рисую сегмент круга, знаю координаты центра (т.А), координаты т.В - точка лежащая на окружности, является центром сегмента, расстояние АВ и азимут. Круг небольшой 500м < R < 700м.
Координаты LatLng(56.63392, 47.8757)
А кто сказал, что это круг?
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 15:11
arttry
Считаю, что круг, потому что размеры небольшие. Когда рассчитывал азимут, нормально прошло, построив прямоугольный треугольник.
Нужно сначало перейти в какую нибудь плоскую проекцию, посчитать, и обратно.
Как это осуществить?
Новичок в этом деле...
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 15:16
trir
Когда рассчитывал азимут, нормально прошло
Потому что
Меркатор
Как это осуществить?
http://proj4js.org/
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 15:27
arttry
Спасибо! Буду разбираться. Теорию надо подтянуть)
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 20:14
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);
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 25 янв 2016, 20:21
trir
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 26 янв 2016, 10:00
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);
Что я делаю не так?
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 26 янв 2016, 11:53
Ariki
Поменяйте порядок следования параметров в вызове forward(): сначала должна идти долгота, потом широта.
Ну и поделитесь, наконец, какие координаты вы ожидаете получить, чтобы народ не гадал.
Re: OSM + leaflet поворот точки на заданный угол
Добавлено: 26 янв 2016, 12:34
arttry
Должен получить примерно: LatLng(55.86353, 48.53208)