Клуб API Карт

Не удаляются метки после их добавления на карту

SFAIRAT-L
8 мая 2012, 23:03

Помогите решить проблему с удалением определенных меток с карты после их добавления.

Суть следующая:

Есть ряд чекбоксов. В зависимости от нажатого чекбокса, на карте выводятся определенные метки.
Необходимо чтобы после снятия галочки с уже нажатого чекбокса, эти самые метки были удалены. Но при этом, чтобы метки добавленные при нажатии других чекбоксов оставались на карте.

К сожалению все приведенные примеры не подходят для моих целей, но мне все же получилось реализовать процесс вывода на карту, только вот удаление не работает.

<script type="text/javascript">
 
var map;
 
window.onload = function () {
            map = new YMaps.Map(document.getElementById("YMapsID1")
            map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 4);
 
            map.addControl(new YMaps.TypeControl()
            map.addControl(new YMaps.ToolBar()
            map.addControl(new YMaps.Zoom()
            map.addControl(new YMaps.ScaleLine()
            map.enableScrollZoom(
 
YMaps.Events.observe(map, map.Events.Click, function (map, e) {
     map.openBalloon(e.getCoordPoint(), new myLayout(e.getCoordPoint())
}
 
}
 
function showgroups(a,b){
//Запрос данных и вывод меток на карту
YMaps.jQuery.getJSON("vivodpointsmap.php", {id:a,type:b},
function(json){
for (i = 0; i < json.markers.length; i++) {
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json.markers[i].lat,json.markers[i].lng)
placemark.description = '<div style="color:#ff0303;font-weight:bold">'+json.markers[i].name+'</div>';
placemark.description = placemark.description+'<br /><a href="..../item.php?id='+json.markers[i].id+'" target="_blank">Подробнее</a>';
//Проверяем чекбоксы
if ($(":checkbox[id=checkBx" + a + "]").is(":checked"))
{
map.addOverlay(placemark);
}
else
{
map.removeOverlay(placemark);
}
}
}
return false;
}
 
</script> 

 

<input type='checkbox' id='checkBx22' onClick='showgroups(22,1);'>Чекбокс1<br>

<input type='checkbox' id='checkBx16' onClick='showgroups(16,1);'>Чекбокс2<br>

<input type='checkbox' id='checkBx45' onClick='showgroups(45,1);'>Чекбокс3<br>

.....

<input type='checkbox' id='checkBx35' onClick='showgroups(35,1);'>Чекбокс30<br>

 

Насколько я понимаю map.removeOverlay(placemark); не может удалять уже добавленные метки, исходя из полученных данных. И заносить эти метки в группы по чекбоксам тоже наверно не получится, потому что чекбоксов будет очень много. Или же я изначально не правильно начал реализацию данной идеи.

Подскажите в чем дело?

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

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

и не понятно зачем грузить каждый раз маркеры ajax-ом при кликах на чекбоксах

"не понятно зачем вы проверяете чекбоксы в цикле, когда их..." - если не трудно, ткните пальцем) куда именно нужно поставить условие их проверки?

"не понятно зачем грузить каждый раз маркеры ajax-ом..." - а какой способ будет более оптимальный?

 

если не трудно, ткните пальцем) куда именно нужно поставить условие их проверки?

 

вам надо объединить метки в GeoObjectCollection у управлять видимостью коллекций

$(':checkbox').click(function (e) {

    if($(this).is(':checked')) {

        map.addOverlay(collection);

    } else {

        map.removeOverlay(collection);

    }

});

посмотрите этот пример, он правда для первого АПИ, но суть не меняется.

 

- а какой способ будет более оптимальный?


загрузить их один раз

в общем я понял, что отображать и удалять без группы никак
только вот не получается увязать создание группы из приведенного примера...

// Группы объектов  var groups = [  createGroup("Известные памятники", [  createPlacemark(new YMaps.GeoPoint(30.563022,50.426472), "Монумент \"Родина-Мать\""),  createPlacemark(new YMaps.GeoPoint(30.516489,50.45351), "Памятник \"Богдану Хмельницкому\""),  createPlacemark(new YMaps.GeoPoint(30.529874,50.454433), "Арка Дружбы народов")  ], "default#redPoint")  ];

с моей функцией где я получаю метки...
function showgroups(a,b){
//Запрос данных и вывод меток на карту
YMaps.jQuery.getJSON("vivodpointsmap.php", {id:a,type:b},
function(json){
for (i = 0; i < json.markers.length; i++) {
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json.markers[i].lat,json.markers[i].lng)
placemark.description = ''+json.markers[i].name+'';
placemark.description = placemark.description+'
Подробнее';
}
}
return false;
}

1. получаете метки, создаете группу, связываете чекбокс и группу через jQuery.data, добавляете группу на карту.

2.в обработчике клика на чекбоксе проверяете, если в его data есть группа - то в зависимости от состояния чекбокса добавляете/удаляете ее с карты,

если нет, то п.1.

ок, идею понял! но вот с реализацией на практике пошли трудности..., все пробуешь и без толку.
может какой-нибудь пример подходящий приведете или фрагмент кода покажите?

ya.juliazobenko
9 июня 2012, 11:59

а если нужно удалить только 1 конкретную метку? 

не понимаю почему не удаляется метка...

openBalloon срабатывает, а remove на неё нет :(

ya.juliazobenko
9 июня 2012, 12:26

не удалялась метка, потому что он принадлежит коллекции..