Библиотека Leaflet опирается на набор фиксированных строковых и объектных значений, которые формируют «неявные перечисления» внутри API. Они определяют поведение карты, контролов, слоёв, всплывающих элементов и систем координат. Эти значения не оформлены как классические enum-конструкции языка, но фактически выполняют их роль и используются во всех ключевых подсистемах.
Все перечисления и константы группируются внутри глобального
пространства L. Внутри него значения представлены в
виде:
L.CRS)L.Control)L.Browser)Особенность архитектуры заключается в отсутствии строгой типизации перечислений: допустимые значения задаются соглашениями API и проверяются внутри методов.
Одним из наиболее значимых наборов констант является система
координат CRS (Coordinate Reference System). Она определяет
способ преобразования географических координат в пиксельные значения
карты.
L.CRS.EPSG3857
L.CRS.EPSG4326
L.CRS.Simple
Используется по умолчанию в большинстве веб-карт. Основана на проекции Web Mercator.
Географическая система координат (широта/долгота без проекции).
L.CRS.Simple
Используется для нетипичных карт:
Контролы интерфейса размещаются через строковые константы, определяющие их позицию относительно карты.
'topleft'
'topright'
'bottomleft'
'bottomright'
Эти значения применяются во всех UI-компонентах:
L.control.zoom({ position: 'topright' })
L.control.scale({ position: 'bottomleft' })
Механика размещения основана на CSS-классах, которые генерируются динамически:
leaflet-topleaflet-bottomleaflet-leftleaflet-rightКомбинации этих классов формируют итоговую позицию элемента.
События в Leaflet представлены строковыми константами. Они не централизованы в виде enum, но образуют стабильный набор API-идентификаторов.
'load'
'click'
'dblclick'
'mousedown'
'mouseup'
'mousemove'
'zoomstart'
'zoomend'
'move'
'moveend'
'dragstart'
'drag'
'dragend'
Пример использования:
map.on('zoomend', function () {
console.log(map.getZoom());
});
'add'
'remove'
'tileloadstart'
'tileload'
'tileerror'
Эти события позволяют отслеживать процесс загрузки тайлов и управлять состоянием интерфейса загрузки.
Для всплывающих окон используется перечисление направлений, определяющее позицию относительно маркера или координаты.
'top'
'bottom'
'center'
'left'
'right'
'topleft'
'topright'
'bottomleft'
'bottomright'
Применение:
L.popup({ offset: [0, -20], direction: 'top' })
Механика основана на вычислении смещения относительно anchor-точки слоя.
Tooltip использует более ограниченный набор направлений:
'top'
'bottom'
'left'
'right'
'center'
'auto'
Особое значение auto позволяет автоматически выбирать
оптимальное положение на основе границ viewport.
Внутренний набор булевых констант определяет возможности браузера.
L.Browser.ie
L.Browser.edge
L.Browser.webkit
L.Browser.gecko
L.Browser.mobile
L.Browser.retina
L.Browser.touch
L.Browser.pointer
Эти флаги используются для:
Пример:
if (L.Browser.touch) {
map.dragging.disable();
}
Внутренне Leaflet использует два основных рендерера:
L.SVG
L.Canvas
Они не всегда явно вызываются пользователем, но определяют:
Пример явного выбора:
const map = L.map('map', { renderer: L.canvas() });
Маркерная система использует набор дефолтных параметров через
L.Icon.Default.
Ключевые внутренние константы:
iconUrliconRetinaUrlshadowUrliconSizeiconAnchorpopupAnchorПример переопределения:
L.Icon.Default.mergeOptions({
iconUrl: 'marker.png'
});
Слои в Leaflet имеют внутренние состояния и типовые идентификаторы, выраженные через события и флаги:
add / remove — жизненный цикл слояloading / load — состояние загрузки (в
TileLayer)tile — идентификатор тайловой сущностиTileLayer дополнительно использует параметры, которые фактически выступают как перечисления режимов:
{ tileSize: 256 }
{ zoomOffset: 0 }
{ detectRetina: true }
Хотя zoom не оформлен как enum, он работает как дискретная шкала:
minZoom)maxZoom)getZoom())map.setMinZoom(3);
map.setMaxZoom(18);
Эти значения формируют ограниченный диапазон допустимых уровней детализации.
Внутренние утилиты L.DomEvent используют строковые
идентификаторы событий браузера:
'click'
'dblclick'
'mousedown'
'mouseup'
'touchstart'
'touchend'
'keydown'
'keyup'
Также применяются модификаторы:
shiftKeyctrlKeyaltKeyДля работы с границами используются условные режимы:
padinsideoutsideПрименяются при работе с методами:
map.fitBounds(bounds, { padding: [20, 20] });
Все перечисления в Leaflet можно классифицировать как:
Строковые enum-подобные значения
click, zoomend)topleft, bottomright)top, auto)Объектные реестры
L.CRS.*)L.Browser.*)Статические классы
L.ControlL.IconL.SVG, L.CanvasПоведенческие флаги
detectRetinatouchZoomdraggingЭта структура обеспечивает гибкость API без жёсткой типизации, сохраняя расширяемость и обратную совместимость.