Клуб API Карт

Как сделать очень хитрую метку

Пост в архиве.

Добрый день.

Возникла необходимость создания хитрой метки объекта. Объект - это позиция наблюдателя, отмеченная глазом. От него расходятся 8 секторов обзора по 45 градусов. Для каждой метки набор ативных секторов собственный. Ну и плюс для каждого сектора может быть превьюшка фотки с реальным видом в данном направлении. Еще нужно обрабатывать клики по превьюшкам, чтобы показывать полноразмерные фотки.

Собстна вопрос - это как-нить возможно сделать?

7 комментариев
Дмитрий Быков
19 ноября 2017, 06:46
Я делал подобное так
mark1 = new ymaps.Placemark(
[1,1],
{
rotation: 10,
},
{iconLayout: ymaps.templateLayoutFactory.createClass('<img src="mark.gif" width=24 height=24 style="transform: rotate($[properties.rotation]deg);"/>'),
iconShape: {type: 'Circle', coordinates: [12, 12], radius: 15}}


Это метка со своим изображением, которая вращается  установкой properties  rotation


Если правильно выровнять все смещения, сделать прозрачную картинку с сектором (вращение вокруг центра картинки),  а затем наложить метки одна на другую, то всё получится.


ну а  дальше - геометрия (точнее, линейная алгебра).


vx = coord2[0] - coord1[0]; //Координаты вектора направления
vy = coord2[1] - coord1[1];
vx0 = 0;  //Координаты исходного вектора 0 градусов (направлен вниз)
vy0 = 1;
l = Math.sqrt(vx*vx+vy*vy); // длины векторов
l0 = 1;


a = Math.asin((vx*vy0 - vy*vx0)/(l*l0)); //угол между векторами в радианах (из векторного произведения)


if (vy>0) a = Math.PI - a; //Корректировка угла - особенность asin

aa = a * 180/Math.PI; //Угол в градусах

Дмитрий Быков
19 ноября 2017, 06:53
Координаты брать пиксельные (прямоугольные), а не географические (полярные).
Дмитрий Быков,
 Это сектора метки, понятно, спасибо.
Технически я могу заранее нарисовать кучу готовых вариантов со всеми комбинациями секторов и выводить один готовый маркер.
Меня больше интересуют превьюшки и клики по ним.
Дмитрий Быков
19 ноября 2017, 17:10
нарисовать кучу готовых вариантов

много рисовать не надо. достаточно одного сектора, который можно поворачивать, как хочешь
Проще это организовать через наборы коллекций меток: центральная метка с секторами и спутниковые с изображениями. По спутниковым меткам рассчитывается сколько и куда выводить секторов у центральной метки.
Обновлено 19 ноября 2017, 19:27
iKest,
Про кучу меток я тоже думал. Но была мысля, что может есть какой-то более правильный вариант, чем эти как бы костыли.
domter,
Мне кажется, что одна метка с кучей хитровышмарганого кода в шаблоне, это и есть как раз костыли. А с несколькими метками, как раз всё просто и логично...