---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/ru/examples/cases/object_list.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/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-0/examples/1/out/s3-cases/ru/object_list/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/q5zphf?file=index.html">Open in CodeSandbox</a>

<div id="doc">
    <div id="references">
        <a href="https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/ru/ref/reference/ready">ready</a>,
        <a href="https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/ru/ref/reference/Map">Map</a>,
        <a href="https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/ru/ref/reference/GeoObjectCollection">GeoObjectCollection</a>,
        <a href="https://yandex.ru/dev/maps/archive/doc/jsapi/2-0/ru/ref/reference/Placemark">Placemark</a>
    </div>
    <p>
       Пример демонстрирует, как создать меню для отображения коллекций геообъектов карты.
    </p>
    <p>
       Для построения такого меню необходимо создать два представления геообъекта: его API-представление (в виде метки на карте)
       и его DOM-представление (то есть элемент меню).
    </p>
    <p>
       Связать эти представления можно внутри обработчика события у DOM-представления (клик на пункте меню)
       вызовом конкретных методов в API-представлении геообъекта (добавление/удаление метки с карты).
    </p>
    <p>
       В этом примере меню строится на основе массива данных, который определен в файле groups.js.
    </p>
    <p>
       Подробнее пример обсуждается в <a href="https://yandex.ru/blog/mapsapi/26637">клубе</a>.
    </p>

</div>

{% list tabs %}

-   index.html

    ```html
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <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" style="width:480px;height:280px;"></div>
        </body>
    </html>
    ```

-   groups.js

    ```js
    // Группы объектов
    var groups = [
        {
            name: "Известные памятники",
            style: "twirl#redIcon",
            items: [
                {
                    center: [50.426472, 30.563022],
                    name: "Монумент &quot;Родина-Мать&quot;",
                },
                {
                    center: [50.45351, 30.516489],
                    name: "Памятник &quot;Богдану Хмельницкому&quot;",
                },
                {
                    center: [50.454433, 30.529874],
                    name: "Арка Дружбы народов",
                },
            ],
        },
        {
            name: "Покушайки",
            style: "twirl#greenIcon",
            items: [
                {
                    center: [50.50955, 30.60791],
                    name: "Ресторан &quot;Калинка-Малинка&quot;",
                },
                {
                    center: [50.429083, 30.521708],
                    name: "Бар &quot;Сало-бар&quot;",
                },
                {
                    center: [50.450843, 30.498271],
                    name: "Абсент-бар &quot;Палата №6&quot;",
                },
                {
                    center: [50.454834, 30.516498],
                    name: "Ресторан &quot;Спотыкач&quot;",
                },
            ],
        },
        {
            name: "Оригинальные музейчики",
            style: "twirl#orangeIcon",
            items: [
                {
                    center: [50.443334, 30.520163],
                    name: "Музей грамзаписи и старинных музыкальных инструментов",
                },
                {
                    center: [50.446977, 30.505269],
                    name: "Музей истории медицины или Анатомический театр",
                },
                {
                    center: [50.452512, 30.530889],
                    name: "Музей воды. Водно-информационный центр",
                },
            ],
        },
        {
            name: "Красивости",
            style: "twirl#blueIcon",
            items: [
                {
                    center: [50.45987, 30.516174],
                    name: "Замок Ричарда-Львиное сердце",
                },
                {
                    center: [50.445049, 30.528598],
                    name: "&quot;Дом с химерами&quot;",
                },
                {
                    center: [50.449156, 30.511809],
                    name: "Дом Рыцаря",
                },
            ],
        },
    ];
    ```

-   object_list.js

    ```js
    ymaps.ready(init);

    function init() {
        // Создание экземпляра карты.
        var myMap = new ymaps.Map("map", {
                center: [50.443705, 30.530946],
                zoom: 14,
            }),
            // Контейнер для меню.
            menu = $('<ul class="menu"/>');

        // Перебираем все группы.
        for (var i = 0, l = groups.length; i < l; i++) {
            createMenuGroup(groups[i]);
        }

        function createMenuGroup(group) {
            // Пункт меню.
            var menuItem = $('<li><a href="#">' + group.name + "</a></li>"),
                // Коллекция для геообъектов группы.
                collection = new ymaps.GeoObjectCollection(null, {
                    preset: group.style,
                }),
                // Контейнер для подменю.
                submenu = $('<ul class="submenu"/>');

            // Добавляем коллекцию на карту.
            myMap.geoObjects.add(collection);

            // Добавляем подменю.
            menuItem
                .append(submenu)
                // Добавляем пункт в меню.
                .appendTo(menu)
                // По клику удаляем/добавляем коллекцию на карту и скрываем/отображаем подменю.
                .find("a")
                .toggle(
                    function () {
                        myMap.geoObjects.remove(collection);
                        submenu.hide();
                    },
                    function () {
                        myMap.geoObjects.add(collection);
                        submenu.show();
                    }
                );

            // Перебираем элементы группы.
            for (var j = 0, m = group.items.length; j < m; j++) {
                createSubMenu(group.items[j], collection, submenu);
            }
        }

        function createSubMenu(item, collection, submenu) {
            // Пункт подменю.
            var submenuItem = $('<li><a href="#">' + item.name + "</a></li>"),
                // Создаем метку.
                placemark = new ymaps.Placemark(item.center, {
                    balloonContent: item.name,
                });

            // Добавляем метку в коллекцию.
            collection.add(placemark);
            // Добавляем пункт в подменю.
            submenuItem
                .appendTo(submenu)
                // При клике по пункту подменю открываем/закрываем баллун у метки.
                .find("a")
                .toggle(
                    function () {
                        placemark.balloon.open();
                    },
                    function () {
                        placemark.balloon.close();
                    }
                );
        }

        // Добавляем меню в тэг BODY.
        menu.appendTo($("body"));
        // Выставляем масштаб карты чтобы были видны все группы.
        myMap.setBounds(myMap.geoObjects.getBounds());
    }
    ```

{% endlist %}
