Skip to content

StyleFacade — 样式子门面

通过 app.style 访问 Mapbox 样式管理功能。所有方法支持链式调用。

样式应用

apply(style, options)

应用完整样式。

ts
apply(style: object, options?: { diff?: boolean }): this
参数类型描述
styleobjectMapbox 样式对象(必填)
diffboolean是否增量更新(仅变化部分)
ts
app.style.apply({
  version: 8,
  sources: {
    osm: { type: 'raster', tiles: ['https://.../{z}/{x}/{y}.png'] },
  },
  layers: [
    { id: 'osm', type: 'raster', source: 'osm' },
  ],
});

// 增量更新
app.style.apply(newStyle, { diff: true });

get()

获取当前样式。

ts
get(): object
ts
const style = app.style.get();
// style: { version: 8, sources: {...}, layers: [...] }

属性修改

setPaint(layerId, name, value)

设置图层 paint 属性。

ts
setPaint(layerId: string, name: string, value: unknown): this
参数类型描述
layerIdstring图层 ID
namestringpaint 属性名
valueunknown属性值
ts
app.style.setPaint('layer1', 'fill-color', '#ff0000');
app.style.setPaint('layer1', 'fill-opacity', 0.8);

setLayout(layerId, name, value)

设置图层 layout 属性。

ts
setLayout(layerId: string, name: string, value: unknown): this
参数类型描述
layerIdstring图层 ID
namestringlayout 属性名
valueunknown属性值
ts
app.style.setLayout('layer1', 'visibility', 'visible');

setFilter(layerId, filter)

设置图层过滤器。

ts
setFilter(layerId: string, filter: unknown[]): this
参数类型描述
layerIdstring图层 ID
filterunknown[]过滤器表达式
ts
app.style.setFilter('layer1', ['==', 'name', 'test']);
app.style.setFilter('layer1', ['>', 'value', 10]);

图片管理

addImage(id, image)

添加图片资源。

ts
addImage(id: string, image: unknown, options?: object): this
参数类型描述
idstring图片标识
imageunknown图片数据(Image / Canvas / ImageData 等)
ts
app.style.addImage('icon', document.createElement('canvas'));

removeImage(id)

移除图片资源。

ts
removeImage(id: string): this
ts
app.style.removeImage('icon');

setSprite(url)

设置 sprite 图集。

ts
setSprite(url: string): this
ts
app.style.setSprite('https://example.com/sprite.json');

场景设置

setTerrain(options)

设置地形。

ts
setTerrain(options?: { url?: string; exaggeration?: number }): this
参数类型描述
urlstring地形数据源 URL
exaggerationnumber高程夸张倍数
ts
app.style.setTerrain({
  url: 'https://terrain.example.com',
  exaggeration: 1.5,
});

setLight(options)

设置光照。

ts
setLight(options?: { anchor?: string; color?: string; intensity?: number }): this
参数类型描述
anchorstring锚点('viewport'
colorstring光照颜色
intensitynumber强度 (0-1)
ts
app.style.setLight({ anchor: 'viewport', color: '#ffffff', intensity: 0.5 });

setTheme(theme)

设置主题。

ts
setTheme(theme: string): this
ts
app.style.setTheme('dark');

链式调用

ts
app.style
  .apply({ version: 8 })
  .setPaint('layer1', 'fill-opacity', 0.8)
  .setLayout('layer1', 'visibility', 'visible')
  .setFilter('layer1', ['>', 'value', 10])
  .setTerrain({ exaggeration: 2 })
  .setLight({ intensity: 1 })
  .setTheme('dark');

四川省交通运输综合地理服务平台 地图开发框架