Кнопки карты, ссылка на вид и координаты

Кнопки вида карты: начальный вид, ссылка на текущий вид, местоположение, 2D/3D, подложка и масштаб. Внизу — масштабная линейка и координаты под курсором в трёх системах.

Где найти
колонка кнопок справа внизу карты и строка координат по центру внизу.
Функция показана в сквозном сценарии:Первый вход и карта
Читаю как

Возможности

  • «Начальный вид» — вся сеть показанных фрагментов (если охват не известен — центр города).
  • «Скопировать ссылку на этот вид карты» — короткая ссылка вида …/s/7Kp2xQa: откроет карту в том же месте, с тем же масштабом, поворотом, наклоном, фрагментами и слоями.
  • «Моё местоположение» — карта переходит к вам, красная метка «Вы здесь» видна 5 секунд.
  • «2D/3D» — переключение на 3D-вид (Cesium) и обратно, там же «Сеть под землёй».
  • «Базовый слой» — подложка: MapTiler (OSM Bright), «Подробная карта улиц», MapTiler Planet v4 (по умолчанию), «Спутниковая карта», OpenStreetMap, 2GIS, Google Maps.
  • Масштабная линейка слева внизу; координаты под курсором — в WGS84, местной системе (9998) или координатах десктопа, с копированием в нужном формате.

Как это работает

Адрес страницы помнит вид. При каждом сдвиге карты адрес в строке браузера меняется: #масштаб/широта/долгота[/поворот[/наклон]], а если фрагменты или слои отличаются от умолчаний — ещё &fr= (фрагменты диапазонами, 2-46,54) и &ly= (слои). Широта и долгота — с 5 знаками (около 1 м). Обновить страницу или добавить её в закладки — значит вернуться к тому же виду.

Короткая ссылка. Кнопка ссылки сохраняет вид на сервере (таблица tgid_share_link базы города) и копирует адрес …/s/<код> из 7 знаков без похожих символов (0/O, 1/l/I). Тот же вид даёт тот же код. Ссылка работает только в своём городе. Если сервер недоступен, копируется полный адрес с #….

Координаты. WGS84 считается в браузере. Местная система (SRID 9998) и координаты десктопа (x/y узлов, в сантиметрах) пересчитываются на сервере через PostGIS, когда курсор остановился на 0,25 с. Форматы копирования:

Формат Пример Куда вставлять
Широта, долгота 43.249132, 76.944852 Яндекс, Google, 2ГИС
Долгота широта 76.944852 43.249132 ГИС, GeoJSON
Местная система X Y, м 3 знака после запятой десктоп, САПР
x y десктопа, см 1 знак после запятой поля координат узлов десктопа

Что нужно для работы

  • Подложки MapTiler — ключ NUXT_PUBLIC_MAPTILER_KEY у веба; без него карта работает на OpenStreetMap.
  • «Моё местоположение» — только по защищённому адресу (https) и с разрешением браузера на геолокацию.
  • Короткие ссылки — миграция 20261103_share_links.sql в базе города (API применяет её сам).

Шаги

  1. Колонка справа внизу: «Начальный вид» (домик), «Скопировать ссылку на этот вид карты», «Моё местоположение», «2D/3D», «Базовый слой» (подложка); ниже — «Приблизить» и «Отдалить».

    Кнопки карты, ссылка на вид и координаты: шаг 1

  2. Кнопка ссылки копирует короткую ссылку на текущий вид: место, масштаб, поворот, фрагменты и слои. Внизу появится «Ссылка на этот вид карты скопирована».

    Кнопки карты, ссылка на вид и координаты: шаг 2

  3. «Базовый слой» открывает список подложек; текущая отмечена галочкой.

    Кнопки карты, ссылка на вид и координаты: шаг 3

  4. Строка координат внизу показывает точку под курсором. Нажмите «WGS84», чтобы выбрать систему: WGS84, местная система (9998) или координаты десктопа. Кнопка справа (или клавиша C над картой) копирует координаты.

    Кнопки карты, ссылка на вид и координаты: шаг 4

Примеры

Отправить коллеге место аварии. Приблизьте камеру 2КОК-13А, включите нужный фрагмент и нажмите кнопку ссылки. В чате окажется ссылка вида https://…/tgid/almaty/s/7Kp2xQa — по ней коллега увидит то же место, тот же масштаб и те же фрагменты.

Координаты для бригады. Наведите курсор на точку, нажмите C — в буфере 43.249132, 76.944852: вставляется в навигатор телефона как есть.

Если не получается

  • «Ссылка не найдена — возможно, она из другого города. Откроется карта.» — ссылку сделали в другом городе или она повреждена.
  • «Скопируйте ссылку из адресной строки: …» — браузер не дал доступ к буферу обмена.
  • «Геолокация работает только в безопасном контексте (HTTPS или localhost)», «Доступ к геолокации запрещён…» — откройте сайт по https и разрешите геолокацию в настройках браузера.
  • «Пересчёт недоступен» у местной системы — сервер не ответил; скопируйте координаты в WGS84.

Для администратора

  • Подложки: NUXT_PUBLIC_MAPTILER_KEY; VISICOM — NUXT_PUBLIC_VISICOM_TILES_URL и ключ. Центр и рамка города — NUXT_PUBLIC_MAP_CENTER, NUXT_PUBLIC_CITY_BBOX, фрагменты по умолчанию — NUXT_PUBLIC_DEFAULT_FRAGMENTS.
  • Короткие ссылки: не больше 500 новых в сутки от одного пользователя («Слишком много новых ссылок за сутки…»).

Для разработчика

  • Веб: components/MapControls.vue, components/CursorCoords.vue, composables/useMapPermalink.ts, utils/mapPermalink.ts (формат и пределы: масштаб ≤ 24, наклон ≤ 85, ≤ 200 фрагментов и слоев), utils/mapScaleControl.ts, composables/useBaseLayers.ts, pages/s/[code].vue.
  • API: POST /api/v1/share-links, GET /api/v1/share-links/{code} — database/share_links.py; POST /api/v1/topology/convert-point — пересчёт координат.
  • Тесты: tests/utils/mapPermalink.spec.ts, mapScaleControl.spec.ts, pointCrs.spec.ts; API — tests/test_share_links.py.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо