Клуб API Карт

Скрыть группу маркеров. ObjectManager ? ObjectLayer ?

yolf3d
8 февраля 2009, 02:51

Что то я запутался. Подскажите плиз.

Итак, ObjectManager - сам скрывает объекты, находящиеся за границами экрана. Верно? Судя по документации - верно.

А ObjectLayer имеет функцию setVisible().

И тот и другой добавляются на карту как два разных слоя.

Дальше. У меня маркеры разбиты на группы. Есть пара чекбоксов - по ним должны скрываться и появляться эти группы. Допустим красные и синие.

Маркеров будет много, поэтому логично, что надо использовать ObjectManager. Но он не умеет прятать и показывать маркеры по требованию.

А ObjectLayer как я понимаю - не прячет маркеры за границей экрана.

Маркеры в свою очередь - не имеют функцию hide и show. Поэтому их можно только удалять и добавлять. Это можно сделать конечно, но удаления добавления будут требовать много ресурсов.


Как быть? Можно ли как то получить свойства и ObjectManager-а и ObjectLayer-a ?

7 комментариев
Подписаться на комментарии к посту
Создай два ObjectManager'a один с синими, другой с красными и переключай их видимость добавляя и удаляя их на карты. Добавлять и удалять это самый правильный способ переключения видимости :).
Спасиб за совет )
Такс, что то не получается: Ниже привожу часть кода. Маркеры нормально добавляются на карту, но map.removeOverlay(marker_groups[cat]) не удаляет маркеры с карты. Но я заметил странную вещь - если маркеры сначала все добавить в ObjectManager, а потом добавить его на карту - то такой способ будет работать. Вся проблема в том - что маркеры добавляются ajax-ом в уже существующие группы.Получается надо каждый раз удалять ObjectManager с карты, заливать в него маркеры и снова добавлять? Вот код: var map = null; var objects = null; var marker_groups = []; function init () { map = new YMaps.Map( document.getElementById("YMapsID") ); map.setCenter( new YMaps.GeoPoint( 37.64,55.76 ), 10, YMaps.MapType.MAP ); get_objects(); } function get_objects() { var ajax = new dle_ajax(dle_root + "engine/ajax/map.php",true); ajax.onShow ("Загрузка объектов..."); ajax.onCompletion = function(){ objects = eval(ajax.response); add_objects(); }; ajax.sendAJAX(); } function add_objects() { for(var i=0;ier,marker.Events.Click,function(){openDialog(object.title,object.id);}); YMaps.Events.observe(marker, marker.Events.MouseOver, function(){marker.openBalloon(object.title);}); YMaps.Events.observe(marker, marker.Events.MouseOut, function(){marker.closeBalloon();}); collectMarker(marker, object.category); return marker; } function collectMarker(marker, category) { if(!marker_groups[category]) { marker_groups[category] = new YMaps.ObjectManager(); map.addOverlay(marker_groups[category]); } marker_groups[category].add(marker,9,17); } function switch_category(visible, cat) { if(marker_groups[cat]) { if(!visible) { map.removeOverlay(marker_groups[cat]); } else { map.addOverlay(marker_groups[cat]); } } }
Комментарий удалён
В вашем скрипте сначала маркер добавляется в менеджер. Так работает. А если сначала менеджер на карту, а потом в него маркер - то нет. Вот, достаточно сделать два маркера в разных точках, и поднять map.addOverlay() на пару строк выше - и ваш пример будет работать так как я сказал ) вот ваш измененный пример в действии http://navitron.mobi/dev/dle/test.php вот код: window.onload = function () { var map = new YMaps.Map(document.getElementById("YMapsID")), manager1 = new YMaps.ObjectManager(), manager2 = new YMaps.ObjectManager(), point = new YMaps.GeoPoint(37.64,55.76 ), point2 = new YMaps.GeoPoint(45.84,52.96 ), flagManager = 1; map.setCenter(point); map.addOverlay(manager1); manager1.add(new YMaps.Placemark(point, {style: 'default#greenPoint'})); manager2.add(new YMaps.Placemark(point2)); YMaps.Events.observe(map, map.Events.Click, function () { if (flagManager) { this.removeOverlay(manager1); this.addOverlay(manager2); flagManager = 0; } else { this.removeOverlay(manager2); this.addOverlay(manager1); flagManager = 1; } }) } Если нужен мой код - то вот http://navitron.mobi/dev/dle/index.php?do=map Скрипты карты - почти в самом низу.
Да, это ошибка. Спасибо. Будем исправлять.
Буду очень благобдарен ) Если не сложно - сможете здесь откомментить когда исправите? Или где можно будет увидеть.
Постараемся держать Вас в курсе.