首页 / MapLibre / API 文档
getLayer
先看结论
按 id 取回图层的样式定义,用来确认图层是否存在、读取它绑定的源与当前样式值。
map.getLayer(id) → LayerSpecification | undefined
返回对象包含什么
| 字段 | 说明 |
|---|---|
id | 图层 id |
type | fill、line、symbol、circle、raster 等 |
source | 数据源 id,部分类型可省略 |
source-layer | 矢量瓦片中的图层名 |
paint / layout | 当前的绘制与布局属性,表达式保持数组原样 |
filter | 当前过滤条件,未设置时为 undefined |
minzoom / maxzoom | 可见缩放范围 |
返回的是样式定义,不是渲染器内部对象。修改它不会自动生效,
需要走 setPaintProperty、setLayoutProperty、setFilter。
判断图层是否存在
function ensureLayer(spec) {
if (map.getLayer(spec.id)) {
return;
}
map.addLayer(spec);
}
addLayer 对重复 id 会抛错。切换底图后自定义图层常常被清掉,
在 style.load 回调里用上面的写法补齐是稳的做法。
读取当前样式
var layer = map.getLayer('district-fill');
if (layer) {
console.log(layer.type); // 'fill'
console.log(layer.source); // 'districts'
console.log(layer.paint); // { 'fill-color': [...], ... }
}
/* 单个属性用专用读取方法,能拿到解析后的值 */
var opacity = map.getPaintProperty('district-fill', 'fill-opacity');
paint 里的表达式不会被求值,看到的是原始数组。
需要某要素实际生效的值,用 queryRenderedFeatures 取回要素后读它的属性。
图层类型对照
| type | 用途 | 常用属性 |
|---|---|---|
fill | 面填充 | fill-color、fill-opacity |
line | 线或面边界 | line-color、line-width |
circle | 点符号 | circle-radius、circle-color |
symbol | 图标与文字标注 | icon-image、text-field |
raster | 栅格瓦片 | raster-opacity、raster-brightness-min |
heatmap | 热力密度 | heatmap-radius、heatmap-weight |
顺序也有意义
图层在样式中的先后决定绘制顺序,后添加的压在上面。
getLayer 拿到的是定义,不含顺序信息;
调整顺序用 moveLayer(id, beforeId),查询顺序则影响命中优先级。
样式未加载时返回 undefined。
在 map.on('load') 之前查自定义图层拿不到结果,
构造函数里同步添加的图层也一样。初始化逻辑统一放到 load 回调。
经纬志(2026)。《getLayer》。https://www.jingweizhi.com/maplibre/api/get-layer.html(访问日期 2026-11-03)。