Пункты выдачи на карте

Загрузите список точек из GeoJSON. Переключатель оставляет только открытые пункты.

  1. Нажмите «Открыты сейчас». Синие точки останутся, серые скроются.
  2. Верните «Все пункты», затем нажмите на точку.
import * as sdk from "@umap-llc/map-react";

// HTML: <div id="map" style="height:480px;position:relative"></div>
const map = sdk.createMap({
  container: "map",
  style: "YOUR_STYLE_URL",
  accessToken: "YOUR_ACCESS_TOKEN",
  center: [71.423, 51.128],
  zoom: 14,
});

async function setupExample(map, sdk, report = console.log) {
  const response = await fetch(
    "https://developer.umap.kz/examples/data/branches.geojson",
  );
  if (!response.ok) throw new Error("Не удалось загрузить пункты выдачи");
  const data = await response.json();
  await map.addSource("branches", { type: "geojson", data });
  map.addLayer({
    id: "branches",
    type: "circle",
    source: "branches",
    "rendering-order": "overlay",
    paint: {
      "circle-radius": 9,
      "circle-color": ["match", ["get", "open"], true, "#1769e0", "#8492a6"],
    },
  });
  map.fitBounds(
    [
      [71.393, 51.102],
      [71.449, 51.143],
    ],
    { padding: 70, maxZoom: 14 },
  );
  const button = document.createElement("button");
  button.textContent = "Открыты сейчас";
  button.type = "button";
  button.style.cssText =
    "position:absolute;bottom:20px;left:16px;z-index:4;border:0;border-radius:12px;padding:12px 16px;background:#1769e0;color:white;font:600 13px system-ui;cursor:pointer";
  let onlyOpen = false;
  button.onclick = () => {
    onlyOpen = !onlyOpen;
    map.setFilter(
      "branches",
      onlyOpen ? ["==", ["get", "open"], true] : ["has", "name"],
    );
    button.textContent = onlyOpen ? "Все пункты" : "Открыты сейчас";
    button.setAttribute("aria-pressed", String(onlyOpen));
  };
  map.getContainer().append(button);
  const click = (event) => report(event.features?.[0]?.properties?.name ?? "");
  map.on("click", "branches", click);
  report("Учебная сеть пунктов выдачи · 8 адресов");
  return () => {
    button.remove();
    map.off("click", "branches", click);
  };
}

map.once("load", async () => {
  const cleanup = await setupExample(map, sdk);
  if (cleanup) map.once("remove", cleanup);
});
Как запустить у себя

В JavaScript укажите Style URL и ключ своей карты. Код запускайте в проекте со сборщиком. Во Flutter сохраните пример в lib/main.dart и передайте UMAP_STYLE_URL и UMAP_ACCESS_TOKEN через --dart-define.

Примеры со своими данными загружают подготовленные GeoJSON и изображения. Замените их файлами вашего приложения. Для Flutter-примеров с загрузкой файлов добавьте зависимость: flutter pub add http.

Установка и первая карта →Скачать Flutter-пример