Клуб API Карт

Фильтрация на карте

elama-15997986
12 апреля 2016, 13:54

Добрый день.

Пытаюсь реализовать фильтрацию меток на карте. Пример метки:

 type: 'Feature',
                geometry: {
                    type: 'Point',
                    coordinates: [56.75597027307506,60.62604950000001]
                },
               
                options: {
                    preset: 'islands#lightBlueDotIcon',
                    st_nal: 'zakaz',
                    shkn_nal: 'net'
                }

Сортировка чекбоксами по двум параметрам st_nal и shkn_nal.

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

Пользуясь примерами, получил такой код:


        myGeoObject = new ymaps.GeoObject({
            
        });
function checkState () {
        var shownObjects,
            bySt = new ymaps.GeoQueryResult(),
            byShkn = new ymaps.GeoQueryResult();
         
        if ($('#st_net').prop('checked')) {
            bySt = myObjects.search('options.st_nal = "net"');
        }
        if ($('#st_est').prop('checked')) {
            bySt = myObjects.search('options.st_nal = "est"')
                .add(bySt);
        }
        if ($('#st_zakaz').prop('checked')) {
            bySt = myObjects.search('options.st_nal = "zakaz"')
                .add(bySt);
        }
        
        if ($('#shkn_net').prop('checked')) {
            byShkn = myObjects.search('options.shkn_nal = "net"');
        }
        if ($('#shkn_est').prop('checked')) {
            byShkn = myObjects.search('options.shkn_nal = "est"')
                .add(byShkn);
        }
        if ($('#shkn_zakaz').prop('checked')) {
            byShkn = myObjects.search('options.shkn_nal = "zakaz"')
                .add(byShkn);
        }
        
        shownObjects = bySt.intersect(byShkn).addToMap(myMap);
        myObjects.remove(shownObjects).removeFromMap(myMap);
    }
    
    $('#st_net').click(checkState);
    $('#st_est').click(checkState);
    $('#st_zakaz').click(checkState);
    $('#shkn_net').click(checkState);
    $('#shkn_est').click(checkState);
    $('#shkn_zakaz').click(checkState);
    

Но здесь оба параметра объединяются, т.е. показываются метки только те, которые подходят под оба параметра.

Вопрос: как разделить это? Поставил первый чекбокс - на карте показались метки, удовлетворяющие фильтру, поставил другой - удовлетворяющие ему и т.д.

З.Ы. в программировании не слишком силен, извините)

7 комментариев
Подписаться на комментарии к посту
Не надо класть в опции свои данные, для этого есть properties.
Не надо удалять/добавлять объекты, манипулируйте их видимостью (опция visible)

1. Сделайте все объекты изначально невидимыми опция – visible: false
2. Те объекты которые удовлетворяют условиям фильтра делайте видимыми.
dimik,
я совсем плох в программировании.
Если вам не составит слишком большого труда, могли бы вы продемонстрировать пример кода, пожалуйста, как это реализовать?
elama-15997986,
Выложите ваш код на jsfiddle я помогу поправить
dimik,
http://jsfiddle.net/xdsd6nrr/
заранее спасибо
elama-15997986,
http://jsfiddle.net/xdsd6nrr/1/
dimik,
большое спасибо! премного благодарен
dimik,
а фильтрацию через select возможно организовать? по аналогии с чекбоксами, только несколько селектов?