首页 / MapLibre / API 文档
addLayer
先看结论
把图层插进样式,图层顺序就是绘制顺序,后添加的画在上面。
map.addLayer(layerObject, beforeId?, options?)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
layer | object | 图层定义,至少包含 id 与 type |
beforeId | string | 插到该图层之前(视觉上在其下方);省略则加到最顶 |
options.validate | boolean | 默认 true,校验图层是否符合样式规范 |
图层字段
| 字段 | 必填 | 说明 |
|---|---|---|
id | 是 | 全样式唯一,重复会报错 |
type | 是 | 见下方类型表 |
source | 除 background 外 | 已添加的数据源 id |
source-layer | 矢量源必需 | 瓦片内的图层名 |
filter | 否 | 要素过滤表达式 |
layout / paint | 否 | 布局与绘制属性 |
minzoom / maxzoom | 否 | 图层可见的级别区间 |
metadata | 否 | 自定义信息,原样保留 |
图层类型
| type | 用途 |
|---|---|
background | 整块画布底色,不需要数据源 |
fill | 面填充 |
line | 线 |
symbol | 图标与文字标注 |
circle | 圆点 |
heatmap | 热力图 |
fill-extrusion | 拉伸成体块 |
raster | 栅格影像 |
hillshade | 高程晕渲 |
sky | 天空与雾效,通常用 setSky 配置 |
相关成员
| 成员 | 说明 |
|---|---|
getLayer(id) | 返回图层对象,不存在时为 undefined |
moveLayer(id, beforeId?) | 调整已有图层的顺序 |
removeLayer(id) | 删除图层 |
addSource(id, spec) | 先建数据源,再添加引用它的图层 |
示例
map.addSource('cities', {
type: 'geojson',
data: { type: 'FeatureCollection', features: [] }
});
/* 不指定 beforeId,插到最顶 */
map.addLayer({
id: 'city-dots',
type: 'circle',
source: 'cities',
paint: {
'circle-radius': 5,
'circle-color': '#1f5fd0'
}
});
/* 插到国界线之下,避免压住边界 */
map.addLayer({
id: 'city-halo',
type: 'circle',
source: 'cities',
paint: {
'circle-radius': 10,
'circle-color': '#1f5fd0',
'circle-opacity': 0.18
}
}, 'world-line');
注意事项
样式未加载完就调用会报「Style is not done loading」。
把添加逻辑放在 map.on('load') 或
map.on('style.load') 里,是唯一稳定的时机。
同一 id 重复添加会抛错。运行时增删频繁的图层,先
getLayer(id) 判断存在,再决定添加还是更新属性,
比捕获异常更省。
顺序错了看起来像样式错了。面图层压住线图层时,边界会消失;
把新图层插到 beforeId 指定的位置,比事后调透明度可靠。
经纬志(2026)。《addLayer》。https://www.jingweizhi.com/maplibre/api/add-layer.html(访问日期 2026-11-03)。