Измерения: расстояние и площадь
Измерение расстояния и площади по карте с привязкой к узлам сети, профилем высот по рельефу и выгрузкой в GeoJSON.
Возможности
- «Расстояние» — длина ломаной, длина и азимут каждого отрезка, угол поворота.
- «Площадь» — площадь и периметр контура.
- Привязка к узлам сети: точка рядом с узлом ставится точно в узел (выключается переключателем «Привязка к узлам сети»).
- Профиль высот по рельефу для каждого расстояния: высоты начала и конца, перепад и уклон, подъём и спуск.
- Готовые измерения остаются на карте; их вершины можно перетаскивать. Каждое можно скопировать или удалить, все вместе — выгрузить в GeoJSON.
Как это работает
Измерения считаются в браузере, на сервер ничего не отправляется и в базе не сохраняется. Длины и площади считаются на сфере радиусом Земли (формулы большого круга и Гаусса), поэтому не зависят от масштаба и проекции карты; на длинах в городе расхождение с геодезическими — доли процента.
Привязка. При каждом движении курсора ищется ближайший узел сети в радиусе 12 пикселей. Привязанная точка попадает точно в узел, поэтому длина между узлами совпадает с длиной трассы.
Профиль высот строится по 120 точкам вдоль линии из рельефа MapTiler (terrain-rgb, тайлы масштаба 14). Точность рельефа — около ±5 м, поэтому профиль подходит для оценки уклона трассы, а не для исполнительной съёмки.
Пока включён режим измерений, щелчки по объектам не открывают их карточки, а наведение не подсвечивает объекты.
Что нужно для работы
- Права не нужны: измерять может любой, кто открыл карту.
- Профиль высот — ключ MapTiler у веба (
NUXT_PUBLIC_MAPTILER_KEY); без него длины и площади считаются, а профиля нет («Профиль высот недоступен»).
Шаги
Нажмите кнопку «Измерения» (линейка) в строке режимов над картой — откроется панель «Измерения», режим «Расстояние» включится сам.

Щёлкайте точки линии; точка у узла сети «прилипает» к нему. Двойной щелчок, Enter или правая кнопка — конец. В панели — длина и профиль высот по рельефу: высоты начала и конца, уклон, подъём и спуск.

«Площадь» (квадрат рядом с линейкой): обведите контур и замкните его двойным щелчком или Enter. Готовые измерения остаются на карте; «GeoJSON» выгружает их файлом, «Очистить» убирает все.

Примеры
Длина трассы и уклон. На копии Алматы от узла 2КОК-13А к узлу 2КОК-16 и дальше вдоль улицы — 232,3 м. Профиль: начало 838,8 м, конец 844,6 м, перепад +5,8 м, средний уклон +25 ‰; подъём 7 м, спуск 1 м. Конец выше начала, поэтому дренажная вода по этой трассе стекает к началу линии.
Площадь раскопки. Обведите место работ четырьмя точками и замкните контур — в панели площадь и периметр; кнопка «GeoJSON» сохранит контур файлом measure-ГГГГ-ММ-ДД-ЧЧ-ММ-СС.geojson для отчёта или ГИС.
Если не получается
- Щелчок не ставит точку — точка попала на панель «Измерения»: её можно перетащить за заголовок.
- Двойной щелчок приближает карту — режим измерений выключен; включите его кнопкой с линейкой.
- «Профиль высот недоступен» — нет ключа MapTiler или рельеф не загрузился; длина при этом посчитана.
Для разработчика
- Веб:
components/DrawPanel.vue(панель, положение запоминается вdrawPanelPos),composables/useMapDraw.ts(точки, привязка, слои на карте, клавиши),utils/terrainSample.ts(профиль). - Клавиши — область
measureвutils/hotkeys.ts. - Тесты:
tests/composables/useMapDraw.spec.ts.
