经纬志
首页 / MapLibre / API 文档

getLayer

先看结论

按 id 取回图层的样式定义,用来确认图层是否存在、读取它绑定的源与当前样式值。

最后验证 2026-11-03 · MapLibre GL JS 4.x · 更新 2026-10-29 · 引用本文
map.getLayer(id) → LayerSpecification | undefined

返回对象包含什么

字段说明
id图层 id
typefill、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)。