Line слой (type: "line") используется для визуализации
линейных геометрий на карте: дорог, маршрутов, границ, троп, инженерных
сетей и любых других объектов, представленных в виде
LineString или MultiLineString. В рамках
стилевой спецификации MapLibre GL JS этот слой относится к категории
векторного рендеринга и поддерживает богатую систему стилизации, включая
интерполяции, выражения и динамические свойства.
Line слой работает исключительно с линейными типами геометрий:
LineString — одиночная линия, состоящая из
последовательности координатMultiLineString — набор независимых линийGeoJSON-структура источника данных обычно выглядит следующим образом:
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[71.4304, 51.1282],
[71.4500, 51.1350],
[71.4700, 51.1400]
]
},
"properties": {
"name": "route-1"
}
}
Для MultiLineString:
{
"type": "Feature",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[
[71.43, 51.12],
[71.44, 51.13]
],
[
[71.45, 51.14],
[71.46, 51.15]
]
]
}
}
Line слой всегда опирается на источник (source) типа
GeoJSON или vector tile.
Пример подключения GeoJSON источника:
map.addSource("routes", {
type: "geojson",
data: {
type: "FeatureCollection",
features: [/* линии */]
}
});
Базовая конфигурация слоя:
map.addLayer({
id: "route-line",
type: "line",
source: "routes",
paint: {
"line-color": "#3b82f6",
"line-width": 4
}
});
Минимальный набор свойств уже позволяет визуализировать геометрию, однако реальная сила слоя раскрывается через расширенные параметры стилизации.
Определяет цвет линии. Поддерживает:
"line-color": "#ff0000"
Пример с выражением:
"line-color": [
"match",
["get", "type"],
"highway", "#ff5722",
"street", "#2196f3",
"#999999"
]
Толщина линии в пикселях. Может зависеть от зума:
"line-width": 2
Адаптивная толщина:
"line-width": [
"interpolate",
["linear"],
["zoom"],
5, 1,
10, 3,
15, 8
]
Прозрачность линии:
"line-opacity": 0.6
Комбинируется с цветом для создания слоёв визуальной иерархии (например, фон + обводка).
Размытие линии. Используется для эффектов свечения или мягких контуров:
"line-blur": 1.5
Часто применяется вместе с несколькими слоями одной геометрии.
Создание пунктирных линий:
"line-dasharray": [2, 2]
Интерпретация:
Анимационные эффекты достигаются изменением массива во времени.
Определяет поведение соединений сегментов:
miter — острые углыbevel — срезанные углыround — скруглённые углы"line-join": "round"
Определяет форму концов линии:
butt — обрезанный конецround — округлыйsquare — квадратное продолжение"line-cap": "round"
Смещение линии относительно оригинальной геометрии. Используется для параллельных линий (например, полосы дорог):
"line-offset": 3
Можно комбинировать с несколькими слоями для создания двойных и тройных контуров.
Создание градиента вдоль линии на основе прогресса:
"line-gradient": [
"interpolate",
["linear"],
["line-progress"],
0, "blue",
1, "red"
]
Требует использования lineMetrics: true в source:
map.addSource("route", {
type: "geojson",
lineMetrics: true,
data: routeData
});
Layout влияет на поведение слоя, а не на внешний вид.
"layout": {
"visibility": "visible"
}
Line слой тесно интегрирован с системой выражений MapLibre GL JS. Это позволяет:
Пример фильтрации:
filter: ["==", ["get", "class"], "primary"]
Типичный сценарий — отображение транспортных маршрутов. Часто используется многослойная структура:
{
id: "route-bg",
type: "line",
source: "routes",
paint: {
"line-color": "#000000",
"line-width": 8,
"line-opacity": 0.2
}
}
{
id: "route-main",
type: "line",
source: "routes",
paint: {
"line-color": "#00c853",
"line-width": 4
}
}
{
id: "route-outline",
type: "line",
source: "routes",
paint: {
"line-color": "#ffffff",
"line-width": 6
}
}
Такая схема создаёт визуальную читаемость на любых подложках.
Line слой активно использует масштабирование карты:
Пример адаптивного поведения:
"line-opacity": [
"interpolate",
["linear"],
["zoom"],
6, 0.3,
10, 0.7,
14, 1
]
Line слой считается относительно лёгким для рендеринга, однако есть важные ограничения:
Оптимизационные подходы:
Частая практика — использование нескольких line слоёв поверх одной геометрии:
Каждый слой отвечает за свою визуальную функцию, что упрощает управление стилем и событиями.
Line слой поддерживает события:
clickmouseentermouseleaveПример:
map.on("click", "route-main", (e) => {
console.log(e.features[0].properties);
});
Для точного взаимодействия часто используется
queryRenderedFeatures.
geometry: LineString (использование Point
вместо линии)Line слой часто используется совместно с:
circle — отметки на маршрутеsymbol — подписи и маркерыfill — полигоны, ограниченные линиямиПример: линия + маркеры остановок:
map.addLayer({
id: "stops",
type: "circle",
source: "stops",
paint: {
"circle-radius": 5,
"circle-color": "#ffcc00"
}
});
line-progress применяется в:
Он нормализует позицию вдоль линии от 0 до 1, что позволяет строить непрерывные эффекты независимо от длины геометрии.
На основе Line слоя реализуются:
Пример условной стилизации по свойствам:
"line-color": [
"case",
["==", ["get", "status"], "active"], "#00e676",
["==", ["get", "status"], "inactive"], "#9e9e9e",
"#2196f3"
]
При работе с vector tile источниками Line слой получает преимущества:
Пример:
map.addSource("roads", {
type: "vector",
url: "mapbox://tileset-id"
});
Практически всегда используется композиция:
Такой подход обеспечивает гибкость визуального управления без изменения геометрии.
Line слой не выполняет автоматическое разрешение коллизий между линиями. При наложении:
z-index (порядка добавления
слоя)Line слой является базовым инструментом для:
Его гибкость обеспечивается сочетанием: