Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Нарисовать полукруг / сектор круга на карте

#yandex_maps_api #yandex_maps_jsapi


Можно ли с помощью API создать полуокружность на карте или сектор (не в виде треугольника,
а чтобы на конце была дуга), посоветуйте как это сделать.

В качестве известных данных. Радиус, Направление, угол ф, начальная точка. Знаю что
есть прямая и обратная геодезическая задача, но у меня нет конечной точки, только расстояние
и направление. По большому счёту интересует вопрос отрисовки секторов на карте.
    


Ответы

Ответ 1



Можно просто нарисовать полигон нужной формы. Самое простое решение выглядит так: http://jsfiddle.net/tLs0d51u/ Но там получился не совсем круг, поскольку круг формируется в сферических координатах (в широте и долготе), а не в декартовых. Чтобы нарисовать нормальный круг, нужно работать с глобальными пиксельными координатами, а затем перевести их в сферические. Это можно сделать так: var zoom = map.getZoom(); var projection = map.options.get('projection'); // широта и долгота -> пиксели projection.toGlobalPixels([55.73, 37.75], zoom); // пиксели -> широта и долгота projection.fromGlobalPixels([158560.7111111111, 82211.42703728657], zoom); Сектор нормального круга: http://jsfiddle.net/tLs0d51u/1/

Ответ 2



Отрисовывал сектор через решение прямой геодезической задачи, при этом в исходных данных имел радиус, угол, координаты начальной точки. function getAreaCoord(point, azimut, corner, length) {// получение координат сектора var sector = []; var firstSide = Math.PI * ((360 - azimut) + 90) / 180, // азимут в радианах secondSide = firstSide - (Math.PI * corner / 180), dir2 = [Math.sin(firstSide), Math.cos(firstSide)]; // направление по азимуту sector[0] = ymaps.coordSystem.geo.solveDirectProblem(point, dir2, length).endPoint; var i = 1; for(var sectopPoint = 5; sectopPoint <= corner; sectopPoint += 5) { var middlePoint = sectopPoint; var side = firstSide - (Math.PI * middlePoint / 180); var dir4 = [Math.sin(side), Math.cos(side)]; sector[i] = ymaps.coordSystem.geo.solveDirectProblem(point, dir4, length).endPoint; i++ } return sector; }

Комментариев нет:

Отправить комментарий