Клуб API Карт

Как добраться до отдельного маркера, который был добавлен с помощью ArrayCollection

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

Добавляю маркеры через ArrayCollection, делаю так потому что не нашел другого способа получить границы карты, кроме как через ArrayCollection после вставки. 

В разный моменты времени надо удалять различные маркеры, как это сделать? 

Сохранял иднексы с которыми вставлял их в ArrayCollection, но как понял элементы смещаются после удаления предыдущего и индекс меняется. Как достучаться до конкретного маркера в ArrayCollection? 

Пользуясь случаем еще вопросы: 

1)Вставляю в разное время разные элементы на карту, как определять оптимальные границы карты тогда? как я понял границы можно получить только у коллекции которая была вставленно единовременно, причем определять можно только после вставки, я ошибаюсь? 

2) Как очишать карту без дестроя? решил это перебором всех всех вставленных элементов и назначение каждой из них карты null (setMap(null)), но блин у меня очень много элементов :( В апи бинг карт очень удобные слои, удалил весь слои и нет проблем. У яндекс карт такого нет? 

2 комментария

Да действительно в АПИ 2.0 упорядоченная коллекция сдвигает индексы (shift) элементов при их удалении. Это связано с тем что разработчики решили избежать использования sparse-массивов (с дырками), что на мой взгляд, неудобно и путает пользователей.

Вроде бы они (разработчики) согласились пересмотреть эту логику к версии 2.1

 

Вместе с тем при наличии прямых рук и знаний Javascript, написание своего класса на основе Javascript-массива и неупорядоченной коллекции геообъектов (на основе двухсвязного списка), который будет работать так как Вы хотите, + пример его использования, – заняло у меня меньше часа.

 

По остальным вопросам:

1) Да, только после добавления на карту, и также можно сразу выставлять границы карты по всему содержимому ее корневой коллекции (поле geoObjects) в которую могут входить другие коллекции.

myMap.setBounds(myMap.geoObjects.getBounds());

2) Можно удалять целиком одну из коллекций с карты

myMap.geoObjects.remove(myCollection);

freshfactory.tracker
28 января 2016, 02:35

спасибо бабушка за столь развернутый ответ