Клуб API Карт

Подпись к полигонам

madzhugin
6 марта 2014, 10:29

Мне необходимо расположить внутри полигонов некоторую информацию. Например название округа. Я не придумал ничего лучше (возможно это плохое решение), чем добавить в геометрию полигона свойство center примерно так:

 

{ "type": "Feature", "properties": { "ID": 0, "OSM_ID": '', "NAME": "ЦАО", "OKATO_CODE": "45286000000", "OKATO_NAME": "", "OKTMO_CODE": "", "OKTMO_NAME": "", "NAME_EN": "", "NAME_LAT": "", "AREA": 0, "ADM3_ID": 0, "ADM3_NAME": "", "ADM4_ID": 0, "ADM4_NAME": "Москова" }, "geometry": { "type": "Polygon",'center': [55.75, 37.59], "coordinates": [[блаблаблакоординаты]]},'options': polyStyle},

И далее при добавленнии динамических данных для каждого региона я создаю метку:
var objPlacemark = new ymaps.GeoObject({
// Описание геометрии.
'geometry': {
'type': "Point",
'coordinates': obj.geometry.center
},
// Свойства.
'properties': {
// Контент метки.
'iconContent': info.iconContent,
}
}, {
'iconImageHref': 'i/Circle_title.png',
'iconImageSize': [67, 67]
})
ymaps.geoQuery(objPlacemark).addTo(collectionMoscow);
и добавляю ее в коллекцию.
Теперь мне необходимо чтобы метка менялась при наведении курсора на регион.

Как этого добится? Как связать метку с регионом и получить ее в событии?

Я подсвечиваю регион в при наведении так:
collectionMoscow.each(function(geoObject){
geoObject.events
.add('mouseenter', function (e) {
// Ссылку на объект, вызвавший событие,
// можно получить из поля 'target'.
var obj = e.get('target')
obj.options.set(polyStyleHighlight);
if (obj.icon != undefined) {
obj.icon.options.set({'iconImageHref': 'i/Circle_main.png'})
}
})
.add('mouseleave', function (e) {
e.get('target').options.set(polyStyle);
});
});

 

Работающий пример: http://oceansites.ru/map/ 

5 комментариев
Подписаться на комментарии к посту

Запишите ссылку на служебную метку в данные полигона

polygon.properties.set('centerPlacemark', placemark);

Т.е. объект в свойства полигона положить?

Я думал об этом, но в момент когда создаются метки еще нет никаких полигонов. Я пытался полжить метку в JSON на основе которого полигон создается, но это полигон потом почему-то не имеет этой ссылки.

 

 

А как вы передаете этот JSON?

Вопрос снят - сам ступил. Когда делал так, пытался получить доступ к объекту как-то так obj.properties.centerPlacemark вместо правильного - obj.properties.get('centerPlacemark');

Спасибо что заставили усомнится в том что такой метод не работает и проверить еще раз. )

 

 

не за что)