经纬志
首页 / MapLibre / API 文档

Style

先看结论

一份描述底图与图层的数据,可以是 JSON 对象,也可以是指向 JSON 的 URL。

最后验证 2026-11-03 · MapLibre GL JS 4.x · 更新 2026-10-27 · 引用本文
new maplibregl.Map({ style: styleObjectOrUrl, … })

结构

字段必需说明
version是固定 8
sources是数据源,键名就是图层里引用的 source
layers是绘制顺序,后面的盖住前面的
glyphs文本图层需要字体切片模板,含 {fontstack} 与 {range}
sprite图标图层需要雪碧图 URL 前缀,对应 png 与 json
center / zoom / bearing / pitch否样式自带的初始视角
{
  "version": 8,
  "sources": {
    "osm": {
      "type": "raster",
      "tiles": ["https://tile.example.com/{z}/{x}/{y}.png"],
      "tileSize": 256,
      "attribution": "© 示例瓦片"
    }
  },
  "layers": [
    { "id": "osm", "type": "raster", "source": "osm" }
  ]
}

源类型

type用途关键字段
vector矢量瓦片url 或 tiles + minzoom
raster栅格瓦片底图tiles、tileSize、attribution
geojson业务数据data、cluster
raster-dem高程瓦片,用于地形encoding(terrarium / mapbox)
image单张图片贴在地图上url、coordinates 四角

操作样式的方法

方法说明
map.getStyle()返回当前样式对象,可用来查图层 id
map.setStyle(style, {diff})替换样式,diff 默认为 true
map.getSource(id)取回源对象
map.setPaintProperty(layer, prop, value)改绘制属性
map.setLayoutProperty(layer, prop, value)改布局属性
map.moveLayer(id, beforeId)调整顺序

属性值可以是表达式

颜色、宽度、半径等属性既可以写常量,也可以写表达式数组, 按缩放级别、属性值、要素状态动态计算。

map.setPaintProperty('route-line', 'line-width', [
  'interpolate', ['linear'], ['zoom'],
  3, 1.2,
  8, 4
]);

map.setPaintProperty('zones-fill', 'fill-color', [
  'match', ['get', 'level'],
  'high', '#c2410c',
  'low', '#1f5fd0',
  '#8a929f'
]);

整体切换

setStyle 之后,旧样式里的源和图层都不再存在。 自定义图层要在 style.load 里重新添加。 同一份样式之间切换时开启 diff,可复用未变化的资源,减少闪烁。

map.setStyle(nextStyleUrl, { diff: true });

map.on('style.load', function () {
  addBusinessLayers();
});

样式地址要能跨域访问。样式 JSON 自身、瓦片、字形、雪碧图是四类独立请求, 任何一类被跨域拦截都会让地图残缺。逐类检查,比笼统说「地图没出来」快得多。

引用本文

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