Клуб API Карт

Подсветка полигона при наведении на него мышкой

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

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

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>
FFFFFFFF</repr:strokeColor>
<repr:strokeWidth>1</repr:strokeWidth>
<repr:outline>
1</repr:outline>
<repr:fill>
1</repr:fill>
<repr:fillColor>FC910633</repr:fillColor>
</repr:polygonStyle>
<repr:balloonContentStyle>
<repr:template>#customTemplate</repr:template>
</repr:balloonContentStyle>
</repr:Style>
5 комментариев

Вы попробуйте сначала прочитать руководство по переходу, оно не большое,

а что не получится перевести, мы поможем.

Загружать YMapsML в 2.0 нужно через ymaps.geoXml.load

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

У меня не получается установить стиль hoover

o.setStyle("http://www.2kom.ru/map/-regions.xml#hoverStyle"); 

типсы получились
myHintLayout = ymaps.templateLayoutFactory.createClass(
'Округ № $[properties.name] - $[properties.description]'
);
ymaps.layout.storage.add('my#superlayout', myHintLayout);

res77=ymaps.geoXml.load(url)
.then(function (res77) {

var items = [];
res77.geoObjects.each(function (item) { items.push(item); });
for (var i = 0; i < items.length; i++) {
myPolygonCollection.add(items[i]);
}

myMap.geoObjects.add(myPolygonCollection);
myPolygonCollection.each(function (item) {
var name = item.properties.get('name');
item.options.set('hintContentLayout', 'my#superlayout');

....
....
....
.add('mouseenter', function (e) {
var geoObject = e.get('target'),
position = e.get('globalPixelPosition');
})
.add('mouseleave', function (e) { });

По-хорошему тебе не надо так делать.

Перебирать все объекты чтобы поменять макет хинта - плохо,

лучше определить его в самом YMapsML, и тогда хинты уже будут выводить то что ты хочешь, без лишних телодвижений в javascript

Обработчики событий 'mouseenter', 'mouseleave' лучше повесить один на коллекцию res77.geoObjects, а не на каждый гееобъект по отдельности. Получить текущий геообъект (на котором произошло событие) в таком обработчике можно из объекта-события e.get('target')

Применить стили можно подобным образом

e.get('target').options.set("preset", "http://www.2kom.ru/map/-regions.xml#hoverStyle");

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

Попробую. Спасибо!