Skip to content

Кластеры ​

500 пунктов выдачи на карте Москвы. Близкие точки собираются в кластеры с числом внутри, клик по кластеру приближает карту. Цвет отдельной точки задаёт pointStyle по её индексу в массиве: зелёные пункты открыты, серые закрыты. Клик по точке открывает балун с названием.

Если несколько точек стоят в одном месте и приближать дальше некуда, клик по кластеру раскладывает их вокруг центра. Вместо цвета точке можно дать свою картинку — icon: { url, size, anchor }, как у метки. Все опции — в справочнике слоёв.

Код ​

Код ниже — рабочий, с боевыми адресами: вставьте как есть на свою страницу.

html
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>EvaMaps SDK — кластеры</title>
    <link rel="stylesheet" href="https://evamaps.ru/sdk/1/evamaps.css" />
    <style>
      html,
      body {
        margin: 0;
        font-family: system-ui, -apple-system, sans-serif;
      }
      #map {
        width: 100%;
        height: 520px;
      }
      p {
        margin: 10px 16px;
        color: #555;
        font-size: 13px;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>

    <script src="https://evamaps.ru/sdk/1/evamaps.js"></script>
    <script>
      var map = EvaMaps.create('map', {
        center: [37.6173, 55.7558],
        zoom: 9,
        theme: 'light',
      });

      // Свои данные: координаты [долгота, широта] и что угодно ещё.
      var points = [];
      for (var i = 0; i < 500; i++) {
        points.push({
          lngLat: [37.6173 + (Math.random() - 0.5) * 1.6, 55.7558 + (Math.random() - 0.5) * 0.9],
          name: 'Пункт выдачи №' + (i + 1),
          open: Math.random() < 0.7,
        });
      }

      var cluster = EvaMaps.cluster(
        points.map(function (p) {
          return p.lngLat;
        }),
        {
          // Цвет отдельной точки — по индексу в массиве.
          pointStyle: function (index) {
            return { color: points[index].open ? '#2b8a3e' : '#868e96' };
          },
        },
      ).addTo(map);

      cluster.on('pointClick', function (e) {
        var p = points[e.index];
        EvaMaps.popup()
          .setLngLat(e.lngLat)
          .setText(p.name + (p.open ? ' — открыт' : ' — закрыт'))
          .openOn(map);
      });
    </script>
  </body>
</html>

← Все примеры

Нашли ошибку в документации? Напишите нам