Адрес офиса и карточка

Метка с названием и компактная карточка адреса — для страницы контактов.

  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) {
  map.jumpTo({ center: [71.43045, 51.12829], zoom: 15.6, pitch: 0 });
  const button = document.createElement("button");
  button.type = "button";
  button.textContent = "Офис";
  button.style.cssText =
    "border:3px solid white;border-radius:24px;padding:10px 16px;background:#1769e0;color:white;font:600 14px system-ui;box-shadow:0 4px 16px #132d4930;cursor:pointer";
  const card = document.createElement("div");
  card.style.cssText =
    "padding:16px;background:white;border-radius:16px;box-shadow:0 8px 32px #172b4d25;min-width:220px;font:14px/1.6 system-ui;color:#253348";
  const title = document.createElement("strong");
  title.textContent = "Офис на левом берегу";
  const address = document.createElement("div");
  address.textContent = "Район Байтерека, Астана";
  const hours = document.createElement("div");
  hours.textContent = "Пн–Пт · 09:00–18:00";
  hours.style.color = "#64748b";
  card.append(title, address, hours);
  const popup = new sdk.Popup()
    .setLngLat([71.43045, 51.12829])
    .setDOMContent(card);
  Object.assign(popup.getElement().style, {
    marginTop: "-42px",
    padding: "0",
    background: "transparent",
    boxShadow: "none",
  });
  const marker = new sdk.Marker({ element: button })
    .setLngLat([71.43045, 51.12829])
    .addTo(map);
  let open = false;
  button.onclick = (e) => {
    e.stopPropagation();
    open = !open;
    if (open) popup.addTo(map);
    else popup.remove();
  };
  return () => {
    marker.remove();
    popup.remove();
  };
}

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-пример