Класс L.Path является базовым абстрактным уровнем для
всех векторных слоёв в Leaflet. Он не используется напрямую для создания
объектов карты, но определяет общую модель поведения и набор
возможностей для геометрических примитивов: линий, многоугольников,
окружностей, прямоугольников и их производных.
Внутри архитектуры Leaflet векторные объекты выстроены в иерархию,
где L.Path выступает промежуточным слоем между базовым
классом L.Layer и конкретными геометрическими
реализациями.
Основные задачи L.Path:
L.Path не хранит конкретную геометрию как
самостоятельную сущность, а оперирует абстрактным набором координат,
предоставляемых наследниками.
Все наследники L.Path принимают единый набор опций,
определяющих визуальное представление векторных объектов.
butt,
round, square);round, bevel, miter);evenodd
или nonzero).Эти параметры передаются вниз по иерархии и интерпретируются конкретным рендерером.
L.Path управляет жизненным циклом векторного слоя через
несколько ключевых стадий:
При изменении координат вызывается пересчёт геометрии и повторная отрисовка без пересоздания всего слоя.
setStyle(styleObject) Обновляет параметры визуального отображения без пересоздания объекта.
Типичный набор свойств:
При вызове происходит частичное обновление SVG или Canvas представления.
bringToFront() Перемещает слой поверх других в своём pane.
bringToBack() Перемещает слой под остальные элементы.
Эти методы влияют на порядок DOM-элементов или порядок отрисовки в Canvas.
redraw() Инициирует полную перерисовку геометрии.
Используется при изменении состояния, не связанного напрямую с координатами (например, изменение DPI, масштабирование контейнера, внешние трансформации).
В базовом L.Path геометрия не задаётся напрямую, но
наследники реализуют методы изменения координат. После изменения
вызывается пересчёт через redraw().
**_update()** (внутренний метод) Отвечает за синхронизацию визуального представления с текущими данными геометрии и стилями.
Leaflet поддерживает два механизма отрисовки векторных объектов:
SVG является стандартным режимом:
<path>;SVG используется по умолчанию при отсутствии ограничений производительности.
Canvas-режим активируется при больших объёмах данных:
Выбор рендерера определяется классами L.SVG и
L.Canvas, которые реализуют единый интерфейс для
L.Path.
L.Path расширяет базовую систему событий
L.Layer, добавляя интерактивность для векторных
объектов.
Поддерживаются события:
clickdblclickmousedownmouseupmouseovermouseoutmousemovecontextmenuПри включённой опции interactive: true Path участвует в
hit-testing — определении попадания курсора в геометрию.
Для SVG используется встроенная обработка событий DOM, для Canvas применяется математическая проверка попадания в контур.
Класс служит основой для большинства векторных объектов Leaflet.
Ломаная линия, представляющая последовательность координат:
LatLng;Замкнутый многоугольник:
Частный случай Polygon:
Геометрия окружности:
В отличие от Circle, радиус фиксирован в пикселях и не зависит от масштаба карты.
Параметр className позволяет подключать внешние стили к
SVG-элементам.
В SVG-режиме каждый Path получает соответствующий DOM-элемент:
Canvas-режим игнорирует CSS-стили, поскольку вся отрисовка происходит программно.
При каждом изменении масштаба карты Path проходит перерасчёт координат:
Этот процесс выполняется через внутренние методы преобразования
latLngToLayerPoint.
Работа с L.Path становится критичной при большом
количестве объектов.
Ключевые факторы влияния:
redraw;Canvas снижает нагрузку на DOM, но увеличивает нагрузку на CPU при перерисовке. SVG, наоборот, создаёт больше DOM-узлов, но облегчает частичное обновление отдельных объектов.
L.Path наследует поведение L.Layer,
включая:
addTo(map);remove().При добавлении на карту Path регистрируется в соответствующем рендерере, после чего становится частью глобального слоя отрисовки.
Path автоматически реагирует на изменения карты:
Каждое изменение триггерит пересчёт координат и обновление геометрии без необходимости ручного вмешательства.