经纬志
首页 / MapLibre / API 文档

Layer

先看结论

图层是绘制指令:拿一个数据源,按几何类型和样式规则画出来。

最后验证 2026-11-03 · MapLibre GL JS 4.x · 更新 2026-10-27 · 引用本文
map.addLayer(layer, beforeId)

通用字段

字段必需说明
id是全图唯一,后续改属性、删图层都靠它
type是见下表
source是数据源 id;background 图层例外
source-layer矢量瓦片必填瓦片内部的图层名
minzoom / maxzoom否可见的缩放区间,包含端点
filter否按属性或几何类型筛选要素
layout否排布与可见性
paint否外观

类型

type接受的几何典型用途
background无整幅画布底色
fillPolygon面填充
lineLineString、Polygon 边界路线、描边
circlePoint点位,按属性控制半径与颜色
symbolPoint、LineString图标与文字标注
heatmapPoint密度热力
fill-extrusionPolygon建筑体块等三维面
raster栅格源影像、扫描图
hillshaderaster-dem地形晕渲

示例

map.addLayer({
  id: 'zones-fill',
  type: 'fill',
  source: 'zones',
  paint: {
    'fill-color': ['get', 'color'],
    'fill-opacity': 0.35
  }
}, 'labels');   // 插到 labels 图层下面

beforeId 省略时图层加到最上层。指向不存在的 id 时, 行为等同于加到最上层,不会报错。

筛选与缩放区间

map.addLayer({
  id: 'major-roads',
  type: 'line',
  source: 'base',
  'source-layer': 'roads',
  filter: ['all',
    ['==', ['get', 'class'], 'primary'],
    ['>', ['get', 'length'], 500]
  ],
  minzoom: 8,
  paint: { 'line-color': '#c2410c', 'line-width': 2 }
});

条件尽量写在 filter 和 minzoom 里, 让不需要的要素在渲染前就被排除。用表达式在 paint 里返回透明色, 几何仍然会被处理,数据量大时性能差一截。

图层没有出现时的检查顺序

  1. source 是否存在,id 是否与 addSource 一致。
  2. 矢量瓦片的 source-layer 是否真实存在。
  3. filter 是否把所有要素都排除了。
  4. 当前缩放是否落在 minzoom–maxzoom 之外。
  5. 图层是否被上层不透明的面或栅格完全遮住。
  6. 几何类型是否与图层 type 匹配,例如把线交给 fill 图层不会报错但画不出来。

id 命名带上用途前缀。zones-fill、zones-line 比 layer1、layer2 更容易在运行时排查, 也能避免与底图图层重名。

引用本文

经纬志(2026)。《Layer》。https://www.jingweizhi.com/maplibre/api/layer.html(访问日期 2026-11-03)。