Класс Polyline в библиотеке Leaflet предназначен для отображения ломаных линий на интерактивной карте. Ломаная линия представляет собой последовательность географических точек, соединённых отрезками прямых. Этот объект используется для визуализации маршрутов, дорог, троп, границ, траекторий движения и любых других линейных геоданных.
Polyline является расширением базового класса Path и наследует его свойства и методы, включая стилизацию, обработку событий и возможность динамического обновления координат.
Базовая инициализация выполняется через конструктор
L.polyline, которому передаётся массив координат:
const latlngs = [
[55.751244, 37.618423],
[55.760186, 37.618711],
[55.765123, 37.625789]
];
const polyline = L.polyline(latlngs);
polyline.addTo(map);
Каждый элемент массива представляет собой пару
[latitude, longitude]. Порядок точек критически важен, так
как именно он определяет форму линии.
Polyline можно также создавать с объектом опций:
const polyline = L.polyline(latlngs, {
color: 'blue',
weight: 4,
opacity: 0.7,
smoothFactor: 1.0
});
Polyline поддерживает несколько форматов входных данных:
[[lat, lng], [lat, lng]]
[
L.latLng(55.75, 37.61),
L.latLng(55.76, 37.62)
]
Хотя Polyline сам по себе не является MultiPolyline, библиотека допускает вложенность массивов:
[
[[55.75, 37.61], [55.76, 37.62]],
[[55.77, 37.63], [55.78, 37.64]]
]
Polyline наследует опции Path, поэтому доступен широкий набор параметров.
color Определяет цвет линии:
color: 'red'
weight Толщина линии в пикселях:
weight: 3
opacity Прозрачность линии (0–1):
opacity: 0.5
lineCap Форма концов линии:
roundsquarebuttlineJoin Способ соединения сегментов:
roundbevelmitersmoothFactor Коэффициент упрощения геометрии при отображении:
smoothFactor: 1.0
Чем выше значение, тем сильнее упрощается линия при отрисовке на малых масштабах.
noClip Отключает обрезку линии по границам карты:
noClip: true
Polyline является слоем (Layer) и поддерживает стандартный интерфейс управления слоями.
polyline.addTo(map);
или
map.addLayer(polyline);
map.removeLayer(polyline);
Polyline можно динамически обновлять:
polyline.setLatLngs([
[55.70, 37.60],
[55.71, 37.61]
]);
const coords = polyline.getLatLngs();
Polyline предоставляет методы для анализа структуры линии.
const length = polyline.getLength();
Метод вычисляет географическую длину линии с учётом кривизны Земли (при использовании соответствующих проекций).
const closest = polyline.closestLayerPoint(L.point(100, 100));
Возвращает ближайшую точку на линии относительно пиксельной координаты.
Polyline поддерживает стандартные события интерактивности:
polyline.on('click', function (e) {
console.log('Polyline clicked');
});
polyline.on('mouseover', function () {
polyline.setStyle({ color: 'green' });
});
polyline.on('mouseout', function () {
polyline.setStyle({ color: 'blue' });
});
polyline.on('contextmenu', function () {
console.log('Right click on polyline');
});
Polyline можно стилизовать динамически:
polyline.setStyle({
color: 'black',
weight: 6,
opacity: 0.9
});
Метод применяется без пересоздания объекта, что позволяет эффективно обновлять визуализацию.
Управляют порядком наложения слоёв:
polyline.bringToFront();
polyline.bringToBack();
Polyline часто используется в системах построения маршрутов. Обновление точек позволяет реализовать интерактивное редактирование:
polyline.setLatLngs(updatedRoute);
Polyline в Leaflet учитывает особенности картографической проекции Web Mercator. Это означает:
Для повышения точности маршрутов часто применяют сегментацию линий на более мелкие отрезки.
Polyline широко применяется в системах построения маршрутов:
Пример интеграции с внешними данными:
fetch('/route')
.then(res => res.json())
.then(data => {
const routeLine = L.polyline(data.coordinates, {
color: 'purple',
weight: 5
}).addTo(map);
});
При работе с большим количеством точек Polyline может становиться тяжёлым для рендеринга.
Используются следующие подходы:
smoothFactor;interactive: false).Polyline может комбинироваться с другими объектами:
Polyline поддерживает создание из GeoJSON:
const geojson = {
"type": "LineString",
"coordinates": [
[37.618423, 55.751244],
[37.625789, 55.765123]
]
};
const layer = L.geoJSON(geojson);
layer.addTo(map);
Важно учитывать порядок координат GeoJSON:
[longitude, latitude], в отличие от стандартного Leaflet
формата.
Polyline остаётся одним из наиболее лёгких в рендеринге векторных объектов, однако его производительность зависит от:
При интенсивных изменениях координат рекомендуется минимизировать перерисовку слоя.
Polyline наследуется по цепочке:
Layer → Interactive layer → Path → Polyline
Это обеспечивает доступ к:
Polyline не является самостоятельным рендерером, а лишь специализацией Path для линейной геометрии.