Выделение объектов | MapGL | 2GIS Documentation
MapGL JS API

Выделение объектов

На карте можно выделить различные объекты: здания, дороги и так далее. Чтобы это сделать, нужно вызвать метод карты setSelectedObjects(), передав массив идентификаторов объектов, которые требуется подсветить.

map.setSelectedObjects([id1, id2]);

Идентификатор объекта можно получить, добавив обработчик события click для карты (см. MapPointerEvent):

map.on('click', (e) => {
    if (!e.target) {
        return;
    }
    const { id } = e.target;
    alert('Идентификатор объекта: ' + id);
});

Чтобы убрать выделение, нужно вызвать setSelectedObjects() без параметров:

map.setSelectedObjects();

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>2GIS Map API</title>
        <meta name="description" content="An object selection example" />
        <style>
            html,
            body,
            #container {
                margin: 0;
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script src="https://mapgl.2gis.com/api/js/v1"></script>
        <script>
            const map = new mapgl.Map('container', {
                center: [55.308, 25.237],
                zoom: 18,
                key: 'Your API access key',
            });

            let selectedIds = [];

            map.on('click', (e) => {
                if (!e.target) {
                    return;
                }

                const { id } = e.target;

                if (selectedIds.includes(id)) {
                    selectedIds = selectedIds.filter((i) => i !== id);
                } else {
                    selectedIds.push(id);
                }

                map.setSelectedObjects(selectedIds);
            });
        </script>
    </body>
</html>