Изменение стиля «на лету» | MapGL | 2GIS Documentation
MapGL JS API
Личный кабинет

Дополнение текущего стиля карты «на лету»

Чтобы изменить текущий стиль, экземпляр карты имеет два метода: addLayer и removeLayer.

После создания карты ее стиль будет пустым до тех пор, пока он не будет загружен с сервера. Важно добавлять новые слои только после загрузки стиля, поскольку загруженный стиль полностью перезапишет старый. Для этого в приведенном выше примере используется событие styleload, которое генерируется каждый раз после установки нового стиля:

map.on('styleload', () => {
    map.addLayer(layer);
});

Если вы измените стиль карты с помощью метода map.setStyleById(), вы также можете использовать Promise, возвращаемый этим методом:

map.setStyleById('e05ac437-fcc2-4845-ad74-b1de9ce07555').then(() => {
    map.addLayer(layer);
});

Слои стиля карты упорядочены относительно друг друга. Порядок слоев определяет последовательность их отрисовки на карте.

По умолчанию метод map.addLayer(layer) добавляет новый слой в конец списка, т.е. новый слой будет отрисован последним. Если вам нужно добавить слой не в конец, а перед другим слоем, укажите ID другого слоя в качестве второго аргумента:

map.addLayer(anotherLayer, 'my-polygons-layer');

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

map.addLayer(layer, '577315');
<!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="map.addLayer under roads 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.425, 25.355],
      zoom: 13,
      key: 'Your API access key',
    });
    const layer = {
      "id": "newLayer",
      "name": "Country, 2GIS",
      "type": "polygon",
      "style": {
        "color": "#949494ee",
        "visibility": "visible"
      },
      "filter": [
        "match",
        [
          "get",
          "sublayer"
        ],
        [
          "Country_2gis_area"
        ],
        true,
        false
      ]
    }
    map.on('styleload', () => {
      map.addLayer(layer, '577315');
    });
  </script>
</body>