Клуб API Карт

Обработка событий по объектам, загжуженных через ymaps.geoXml.load

Пост в архиве.
Денис
17 декабря 2012, 09:51

Здравствуйте!

Есть xml-файл, загружаю его в карту через ymaps.geoXml.load , отображаю.

В файле порядка 1000 полигонов с уникальными названиями (цифровыми)

Как отловить клик по полигону и вытащить его имя? 

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

вы можете слушать клик на группе, типа:

 

ymaps.geoXml.load(_url_)

    .then(res) {

        myMap.geoObjects.add(res.geoObjects);


        res.geoObjects.events.add('click', function (e) {

            var myPolygon = e.get('target'); // Полигов в группе получивший клик 

            console.log(myPolygon.properties.get('name')); // Имя полигона

        });

    });

 

Спасибо! То, что нужно!. А можно тут изменять свойства этого объекта?

 

Зы. нашел myPolygon.properties.set('hintContent' ,'Перетащи меня!');

А где почитать про набор свойств?

потому что 

myPolygon.properties.set('hintContent' ,'Перетащи меня!');

- работает , а 

 

myPolygon.properties.set('fillColor' ,'88008822');

myPolygon.properties.set('strokeColor' ,'#3caa3c88');

 

не работает

 

 

ЗЫЗЫ

Наверное потому, что надо вот так:

 

myPolygon.options.set('fillColor' ,'88008822');myPolygon.options.set('strokeColor' ,'#3caa3c88');

:) 

Всем , спасибо, вопросы пока кончились

Нет, все же пару вопросов осталось.

1) Можно ли получить также сссылку на полигон с заданным именем (что-то типа поиска)

2) Можно ли перезагрузить карту, не перезагружая страницу myMap.destroy(); не срабатывыает , потому что myMap локальная переменная


1) какую ссылку?

2) зачем вызывать destroy?

1) неправильно выразился. присвоить переменной полигон, имя которого введено польователем ( как тут, но тут от события на карте var myPolygon = e.get('target'); // Полигов в группе получивший клик )

2) Чтобы очистить карту от kml, который на нее загружен. Причем это надо делать в отдельной процедуре (не в создании карты)

for(var i = 0, len = res.geoObjects.getLength(); i < len; i++) {

    var geoObject = res.geoObjects.get(i);

    if(geoObject.properties.get('name') === 'чтото') {

        myPolygon = geoObject;

        break;

    }

}

2. Удалять карту не нужно. просто удалите с нее ваш KML

1. все получилось, но в частном случае , когда объекты в кмл распиханы по папкам, он возвращает количество папок. Я так полагаю, что это древовидная структура и надо к подобъектам обращаться. Но не принципиально, папки удалил вручную из кмл)

2. А как? через коллекции?

создаете коллекцию, добавляете ее на карту

добавляете в нее ваши геообъекты из кмл и удаляете их методом removeAll