ImageryLayer
球体表面的一层影像。图层本身不负责取瓦片,取瓦片的是它的
imageryProvider;图层负责排序、调色和合成。
日常写法是通过集合添加,让 Cesium 自动封装:
viewer.imageryLayers.addImageryProvider(provider)。
需要一开始就带参数时,构造图层再手动 add。
构造参数
| 参数 | 默认 | 说明 |
|---|---|---|
rectangle | 全球 | 该层的有效范围,范围外不请求瓦片 |
alpha | 1 | 整层透明度 |
nightAlpha / dayAlpha | 1 | 地球昼夜面上的透明度,做夜景专用图层时用 |
brightness | 1 | 亮度,>1 提亮 |
contrast | 1 | 对比度 |
hue | 0 | 色相偏移,弧度 |
saturation | 1 | 饱和度,设 0 变成灰度图 |
gamma | 1 | 伽马校正 |
splitDirection | — | LEFT / RIGHT,配合 scene.splitPosition 做卷帘 |
minimumTerrainLevel / maximumTerrainLevel | — | 按瓦片层级控制显隐,level 数字段见下 |
show | true | 是否显示 |
var layer = new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({
url: 'https://your-host/tiles/{z}/{x}/{y}.png',
minimumLevel: 0,
maximumLevel: 18
}), {
alpha: 0.9,
brightness: 1.1,
contrast: 1.05,
saturation: 0.9
});
viewer.imageryLayers.add(layer);
调色参数怎么配合
不同来源的底图放进同一个窗口,色调往往不一致。调整顺序是
先拉平亮度,再统一对比度,最后压饱和度。扫描件或航拍图偏灰时,
把 contrast 提到 1.15 左右、brightness 略降,
比单纯提亮更容易看清纹理。
| 目标 | 调整 |
|---|---|
| 深色底图上叠加路网 | alpha: 0.7 + 上层 brightness: 1.3 |
| 把彩色底图转成底衬 | saturation: 0.15 + alpha: 0.5 |
| 夜班模式 | 整层 brightness: 0.6,再用 CSS 滤镜压低整体亮度 |
| 两期影像对比 | 两层各设 splitDirection,拖 scene.splitPosition |
顺序操作
顺序由集合中的索引决定,索引大的压在上面。常用的四个方法:
raise、lower、raiseToTop、lowerToBottom。
索引变化后合成顺序立即生效,不需要重建图层。
var layers = viewer.imageryLayers;
layers.raiseToTop(layer); // 置顶
layers.lower(layer); // 下移一层
layers.remove(layer, true); // 移除并销毁,第二个参数不能省
remove(layer, false) 只从集合里摘掉,纹理与请求不会释放。
图层反复增删的场景必须传 true,否则显存会持续增长。
卷帘对比
var oldLayer = viewer.imageryLayers.addImageryProvider(oldProvider);
var newLayer = viewer.imageryLayers.addImageryProvider(newProvider);
oldLayer.splitDirection = Cesium.SplitDirection.LEFT;
newLayer.splitDirection = Cesium.SplitDirection.RIGHT;
viewer.scene.splitPosition = 0.5; // 0 到 1 之间的分割线位置
卷帘模式下两层都不做透明度混合,两侧各取一层的结果。 做历史影像对比时把两层对齐到同一坐标系,否则分割线两侧会错位。
图层不是越多越好。每个可见图层都要单独采样一次纹理, 五层叠加会让片元着色开销翻倍。静态合成好的底图应该预先拼成一层, 而不是在运行时叠五层。
经纬志(2026)。《ImageryLayer》。https://www.jingweizhi.com/cesium/api/imagery-layer.html(访问日期 2026-11-03)。