Клуб API Карт

удалить определенные метки

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

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

var myCollection = new ymaps.GeoObjectCollection();
 $('.showMark').bind('change', function () { // к примеру возьмем чекбокс id="sell"
     if ($(this).is(":checked")) {
         var requestCat = $(this).val();
         $.ajax({
             type: "POST",
             url: "ajax/getMarkers.php",
             data: {
                 "data": requestCat
             },
             cache: false,
             success: function (resp) {
                 if (resp != '') {
                     var inform = JSON.parse(resp); //содержит  2 маркера -   '0':"lat" => "38.25125" "lng" => "40.63473" "category" => "sell"    '1':"lat" => "38.25341" "lng" => "40.64389" "category" => "sell"
                     $('#resp').html(print_r(inform)); //        
                     $.each(inform, function (i, val) {
                         myCollection.add( new ymaps.Placemark([inform[i].lat, inform[i].lng], { // создаем маркеры в коллекции
                         }, {
                             category: inform[i].category, //мне, позже, нужно будет вывести этот елемент "category"
                         }));
                         myMap.geoObjects.add(myCollection); //наносим на карту
                     });
                 }
             }
         });
     } else {
         myMap.geoObjects.remove(myCollection[с маркерами у которых елемент category равен "sell"]);// как мне реализовать?!??!
     }
 });

 

<input type="checkbox" value="sell" class="showMark">продам

<input type="checkbox" value="buy" class="showMark">куплю

 

при нажатии на чекбокс, передается значение в переменную requestCat.

 

затем, например, я нажал на чекбокс id="buy" и получил из ДБ resp с "category" => "buy" и они добавились

 

Но проблема вот в чем:

как сделать так чтобы при снятии галочки с чекбокса по его значению(например sell) удалялись маркеры с category => sell

Думаю внятно обьяснил :)

 

Заранее Спасибо!

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

Используйте второй параметр (объект) в конструкторе метки для хранения своих данных в метках, затем фильтруйте по этим данным все метки и удаляйте те что соответствуют критериям фильтрации

Подскажите пжлст, как мне правильно перебрать массив метки

У коллекций есть метод each

myMap.geoObjects.each

   

вместо маркера создал коллекцию:

 

adCollection.add( new ymaps.Placemark([inform[i].lat,inform[i].lng], {

}, {

preset: 'twirl#violetIcon',

cat: inform[i].category

 }));

- - - - - - - - - - - - - - - - -

код после else

- - - - - - - - - - - - - - - - -

else{

  myMap.geoObjects.adCollection.each(function(i) {

 if(adCollection.i.cat == $(this).val())

 {

     myMap.geoObjects.remove(adCollection.i.cat);

 }

 });

}

 

не могу добратся до cat

 

добавил:

что тут не правильно?

 как использовать метод myMap.geoObjects.each???

Вы знакомы с языком Javascript?

Надо все-таки понимать что Вы пишете и зачем

У коллекции есть интерфейс. Если просто брать из головы какие-то имена полей, и писать их через точку, Вы ничего кроме напрасно потраченного времени, не получите.

 

adCollection.each(function (geoObject) {

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

        ...

    }

});

Тут много что неправильно:

 

myMap.geoObjects.adCollection.each(function(i) {

 if(adCollection.i.cat == $(this).val())

Откуда у myMap.geoObjects возьмется поле "adCiollection"?

Откуда у adCollection возьмется поле "i"?

 

 

 

if($("input").is(":checked")){

//ajax запрос к БД

//получаем json массив "data"

var inform = JSON.parse(data);

$.each(inform, function(i, val) {

myCollection.add(

   var mark = new ymaps.Placemark([inform[i].lat,inform[i].lng],    { }, {

   cat: inform[i].category //<<

}));

                  myMap.geoObjects.add(myCollection);

 });

}

else{

// мне главное получить значение ключа "cat"

}

 

myCollection.add(

   var mark = new ymaps.Placemark(...)

);

В javascript нельзя создавать переменную внутри вызова функции

это синтаксическая ошибка

SyntaxError: Unexpected token var

 

Есть 2 типа коллекции упорядоченная и неупорядоченная

В первой можно обращаться по индексу (см. метод get)

Во второй только перебирая все элементы, искать нужный

 

 

Во второй только перебирая все элементы, искать нужный

я ооочень прошу, напишите

как мне добратся до елемента cat

я не могу понять документацию

мне нужны примеры

 

adCollection.each(function (geoObject) {

    if(geoObject.properties.get('sell') === 'sell') { //geoObject.properties.get('sell') - что это?

      удаление маркера с cat = sell

    }

});

geoObject.properties.get('cat') === 'sell'

Только надо вначале это поле передать во втором параметре в конструктор, как я писал вам раньше

Получилось отфильтровать метки:

 

myCollection.each(function (geoObject) {

   if(geoObject.properties.get('cat') === 'sell'){

      myMap.geoObjects.remove(this);//как мне удалить именно этот маркер?

    }

 });


если пишу:

 myMap.geoObjects.remove(geoObject);//ничего не происходит


если:

myMap.geoObjects.remove(myCollection);// удаляет все маркеры

Удалять надо из myCollection

как именно?

myMap.myCollection.remove(geoObject);

Uncaught TypeError: Cannot call method 'remove' of undefined

откуда у myMap возьмется поле myCollection?

 

я ВАС спрашиваю, как мне правильно написать?

напишите 1 строку, неужели так трудно?

myCollection.remove(geoObject);

myCollection.remove(geoObject);//удаляется только первая метка, а мне нужно чтобы удалились все метки с cat => sell

var myCollection = new ymaps.GeoObjectCollection();

$('.showMark').bind('change',function(){ 

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

          var requestCat = $(this).val();

          $.ajax({

          type: "POST",

          url: "ajax/getMarkers.php",

          data: {"data": requestCat},

          cache: false,

          success: function(resp){

               if(resp != '')

               {

                    var marker;

                    var inform = JSON.parse(resp);

                    $.each(inform, function(i, val) {

                         marker = new ymaps.Placemark([inform[i].lat,inform[i].lng], {

                              cat: inform[i].category

                         }, {

                              preset: 'twirl#violetIcon'

                         });

                         myCollection.add(marker);

                         myMap.geoObjects.add(myCollection);

                    });

               }

          }

      });

   }

   else

   {

   var chekVal = $(this).val();//продам

                                                //куплю

     myCollection.each(function (geoObject) {

          if(geoObject.properties.get('cat') === chekVal){

                myCollection.remove(geoObject);

  //у меня тут стоял display.log('asd) и после первой итерации он выдавал ошибку, поетому цыкл прерывался))  а так код правельный

          }

     });

удаляет первый marker, затем опять ставлю отметку появляется уже 3 маркера( тоесть, было 2, удалился первый, стало 1, потом опять добавилось 2 и стало 3 и т. д.

 

 

   }

});

 

все разобрался)) ВЕЛИКОЕ ВАМ СПАСИБО!!!)