---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/en/v2-1/examples/cases/geoobjects_menu.md
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/examples/cases/geoobjects_menu.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/llms.txt

# Фильтрация объектов на карте по различным признакам

<iframe id="LIVE-EXAMPLE" style="width:100%;height: 400px;border-radius: 8px;border: 1px solid rgba(92, 94, 102, 0.14);" frameBorder="0" src="https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/examples/2/out/s3-cases/ru/geoobjects_menu/index.html" allow="fullscreen"></iframe>

<a target="_blank" rel="noopener noreferrer" style="display: inline-block;margin-top: 10px;cursor: pointer;border-radius: 4px;padding: 9px 12px;background: #151515;color: white;text-decoration: none;font-weight: 500" href="https://codesandbox.io/p/sandbox/mhcpf6?file=index.html">Open in CodeSandbox</a>

<div id="references">
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready">ready</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Map">Map</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoObject">GeoObject</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/geoQuery">geoQuery</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult">GeoQueryResult</a>
</div>
<p>
    С помощью класса  <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult">GeoQueryResult</a> можно формировать набор меток на карте из JSON-описаний их геометрий.
</p>
<p>
    Метод  <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/GeoQueryResult#search">search</a> позволяет фильтровать объекты выборки по различным признакам.
    Например выбирать объекты с определенным значением полей данных или выбирать объекты по типу геометрии.
</p>
<p>
    В данном примере показано, как осуществлять выборку геообъектов по нескольким признакам, делать объединение или пересечение выборок.
</p>

{% list tabs %}

-   index.html

    ```html
      <!DOCTYPE html>

    <html>

    <head>
        <title>Фильтрация объектов на карте по различным признакам</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <!--
            Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
            Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
        -->
        
        
        
        
    </head>
    <body>
        <div id="map"></div>
        <div style="padding: 5px;">
            <div>
                Фильтр по цветам <br>
                <input type='checkbox' id='red' checked=true>Красные</input><br>
                <input type='checkbox' id='green' checked=true>Зеленые</input><br>
                <input type='checkbox' id='yellow' checked=true>Желтые</input>
            </div>
            <div>
                Фильтр по геометриям <br>
                <input type='checkbox' id='point' checked=true>Точки</input><br>
                <input type='checkbox' id='polygon' checked=true>Многоугольники</input><br>
                <input type='checkbox' id='circle' checked=true>Круги</input>
            </div>
        </div>
    </body>
    </html>

    ```

-   geoobjects_menu.js

    ```js
    ymaps.ready(init);

    function init() {
        var myMap = new ymaps.Map(
            "map",
            {
                center: [55.30954, 37.721587],
                zoom: 8,
            },
            {
                searchControlProvider: "yandex#search",
            }
        );

        // Функция, которая по состоянию чекбоксов в меню
        // показывает или скрывает геообъекты из выборки.
        function checkState() {
            var shownObjects,
                byColor = new ymaps.GeoQueryResult(),
                byShape = new ymaps.GeoQueryResult();

            // Отберем объекты по цвету.
            if ($("#red").prop("checked")) {
                // Будем искать по двум параметрам:
                // - для точечных объектов по полю preset;
                // - для контурных объектов по цвету заливки.
                byColor = myObjects
                    .search('options.fillColor = "#ff1000"')
                    .add(
                        myObjects.search('options.preset = "islands#redIcon"')
                    );
            }
            if ($("#green").prop("checked")) {
                byColor = myObjects
                    .search('options.fillColor = "#00ff00"')
                    .add(
                        myObjects.search('options.preset = "islands#greenIcon"')
                    )
                    // После того, как мы нашли все зеленые объекты, добавим к ним
                    // объекты, найденные на предыдущей итерации.
                    .add(byColor);
            }
            if ($("#yellow").prop("checked")) {
                byColor = myObjects
                    .search('options.fillColor = "#ffcc00"')
                    .add(
                        myObjects.search(
                            'options.preset = "islands#yellowIcon"'
                        )
                    )
                    .add(byColor);
            }
            // Отберем объекты по форме.
            if ($("#point").prop("checked")) {
                byShape = myObjects.search('geometry.type = "Point"');
            }
            if ($("#polygon").prop("checked")) {
                byShape = myObjects
                    .search('geometry.type = "Polygon"')
                    .add(byShape);
            }
            if ($("#circle").prop("checked")) {
                byShape = myObjects
                    .search('geometry.type = "Circle"')
                    .add(byShape);
            }

            // Мы отобрали объекты по цвету и по форме. Покажем на карте объекты,
            // которые совмещают нужные признаки.
            shownObjects = byColor.intersect(byShape).addToMap(myMap);
            // Объекты, которые не попали в выборку, нужно убрать с карты.
            myObjects.remove(shownObjects).removeFromMap(myMap);
        }

        $("#red").click(checkState);
        $("#green").click(checkState);
        $("#yellow").click(checkState);
        $("#point").click(checkState);
        $("#polygon").click(checkState);
        $("#circle").click(checkState);

        // Создадим объекты из их JSON-описания и добавим их на карту.
        window.myObjects = ymaps
            .geoQuery({
                type: "FeatureCollection",
                features: [
                    {
                        type: "Feature",
                        geometry: {
                            type: "Point",
                            coordinates: [55.34954, 37.721587],
                        },
                        options: {
                            preset: "islands#yellowIcon",
                        },
                    },
                    {
                        type: "Feature",
                        geometry: {
                            type: "Circle",
                            coordinates: [55.24954, 37.5],
                            radius: 20000,
                        },
                        options: {
                            fillColor: "#ffcc00",
                        },
                    },
                    {
                        type: "Feature",
                        geometry: {
                            type: "Polygon",
                            coordinates: [
                                [
                                    [55.33954, 37.7],
                                    [55.43954, 37.7],
                                    [55.33954, 38.7],
                                    [55.33954, 37.7],
                                ],
                            ],
                        },
                        options: {
                            fillColor: "#ffcc00",
                        },
                    },
                    {
                        type: "Feature",
                        geometry: {
                            type: "Point",
                            coordinates: [55.24954, 37.4],
                        },
                        options: {
                            preset: "islands#greenIcon",
                        },
                    },
                    {
                        type: "Feature",
                        geometry: {
                            type: "Circle",
                            coordinates: [55.14954, 37.61587],
                            radius: 10000,
                        },
                        options: {
                            fillColor: "#00ff00",
                        },
                    },
                    {
                        type: "Feature",
                        geometry: {
                            type: "Point",
                            coordinates: [55.14954, 37.61587],
                            radius: 10000,
                        },
                        options: {
                            preset: "islands#redIcon",
                        },
                    },
                ],
            })
            .addToMap(myMap);
    }
    ```

{% endlist %}
