Клуб API Карт

Подсветка контура активных областей

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

А можно ли реализовать подсветку контура при наведени мышки на активную область? В документации подобного не нашел.

8 комментариев

Можно. Подобным образом работают народные карты

Что-то я не там такого не наблюдал. То что по активным областям можно тыкать это понятно, но как реализовать подсветку объектов (которые собственно и являются активными областями) на карте при наведении? Задача состоит в следующем. Имеется большое количество (скажем 100к) активных областей распределнных по значительной территории. Все это успешно бьется на тайлы с описанием этих областей. Подсказка при наведении так же успешно всплывает, но необходимо сделать подсветку вместо подсказки. Интересуют ссылки на документацию и примеры кода.

 

Как делается подсветка -

при наведении на активную область на карту просто добавляется полигон с моделью интерактивности 'default#transparent'. Соответственно при уходе курсора с области этот полигон надо удалять.

 

Если посмотреть на описание хотспотов, можно найти поле geometry. Мы закладывали его как раз для таких случаев. Если в это поле вы передадите геокоординаты полигона, код будет примерно таким.

var currentPolygon = null;

hotspotLayer.events.add('mouseenter', function (e) {

    var activeShape = e.get('activeShape');

    currentPolygon = new ymaps.Polygon(activeShape.getGeometry(), null, {interactivityModel: 'default#transparent'});

   map.geoObjects.add(currentPolygon);

});

hotspotLayer.events.add('mouseleave, function (e) {

   map.geoObjects.remove(currentPolygon);

  currentPolygon = null;

});

alexlip1972.usachev
28 января 2016, 01:13

А как сам hotspotLayer определить?

на Ваш пример (вы еще скобку забыли после mouseleave)-

ReferenceError: hotspotLayer is not defined
 
hotspotLayer.events.add('mouseenter', function (e) {

Вы ранее написали, что у вас уже получилось создать хотспотный слой, на котором выводятся подсказки. Вот тут подразумевалось, что с этим же слоем вы и будете работать дальше.

alexlip1972.usachev
28 января 2016, 01:13

Вообще говоря хочется сделать как здесь

http://www.2kom.ru/map/

там сделано  на Api 1.0 - как то же самое сделать на api 2  ?

 var ml = new YMaps.YMapsML("http://www.2kom.ru/map/-regions.xml"); 
map.addOverlay(ml);
YMaps.Events.observe(ml, ml.Events.Load, function () {
var obj = this.filter(function (obj) {
return typeof(obj.Events.MouseEnter) == 'string' });
var oldStyle, newStyle; for(var i in obj) {
YMaps.Events.observe(obj[i], obj[i].Events.MouseEnter, function(o){
o.setStyle("http://www.2kom.ru/map/-regions.xml#hoverStyle");
map.hint.show(map.converter.coordinatesToLocalPixels(map.getCenter()), o.name);
 });

а в XML -
<repr:Style gml:id="hoverStyle">
<repr:polygonStyle>
<repr:strokeColor>FFFFFFFFrepr:strokeColor>
<repr:strokeWidth>1repr:strokeWidth>
<repr:outline>1repr:outline>
<repr:fill>1repr:fill>
<repr:fillColor>FC910633repr:fillColor>
repr:polygonStyle>
<repr:balloonContentStyle>
<repr:template>#customTemplaterepr:template>
repr:balloonContentStyle>
repr:Style>

При чем здесь активные области?

Лучше создавать отдельную тему, если ваш вопрос не имеет отношения к теме поста.

В самом YMapsML менять ничего не надо, как переписать js-код, можно прочитать в руководстве по переходу на 2.0

 

alexlip1972.usachev
28 января 2016, 01:13

Извините. Создам новую тему.