点击查看:最新Cesium可视化系统实战视频课程

20250206174022e042a586d8a07d3c5ca23c20aafdd9b5751Cesium 是一个强大的开源 3D 地球引擎,常用于可视化和分析地理空间数据。通过 Cesium,我们可以加载各种类型的地图影像图层,并根据需求调整这些图层的展示风格。本文将结合一个代码示例,详细讲解如何在 Cesium 中调整影像图层的风格(如亮度、对比度、色调、饱和度和伽马矫正等)。

1. 基本概念:影像图层(ImageryLayer)

在 Cesium 中,影像图层用于显示地图影像。影像图层可以是来自在线地图服务(如天地图、Google 地图等)或者本地资源的数据。我们使用 ImageryLayer 类来添加和管理图层,它支持图像来源、样式调整等功能。

2. 创建一个图层

在本示例中,我们创建了一个来自天地图(TianDiTu)服务的影像图层。天地图是中国的一个在线地图服务,提供多种地图样式(如影像图层、道路图层等)。代码首先定义了图层的 URL 模板,并使用 UrlTemplateImageryProvider 来加载该图层。


let tdtType = "img_w"; // 指定图层类型

let url = `https://t{s}.tianditu.gov.cn/DataServer?T=${tdtType}&x={x}&y={y}&l={z}&tk=${tdtKey}`;
// 定义Url模板
const layerProvider = new Cesium.UrlTemplateImageryProvider({
  url: url,
  subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"], // 多级域名优化请求
  tilingScheme: new Cesium.WebMercatorTilingScheme(),  // 使用WEB墨卡托图块方案
  maximumLevel: 18,  // 最大缩放级别
});
let tdtLayer = new Cesium.ImageryLayer(layerProvider);
viewer.imageryLayers.add(tdtLayer);  // 将图层添加到 viewer 中


3. 调整影像图层风格

Cesium 提供了丰富的属性来调整影像图层的风格,使其符合我们的需求。常见的调整参数包括亮度、对比度、色调、饱和度和伽马值等。通过 GUI 控件(如 dat.GUI)来动态调整这些参数,可以让用户方便地调节图层效果。

3.1 亮度(Brightness)

亮度控制的是图像的整体亮度,它改变图像的明暗程度。在 Cesium 中,我们可以使用 brightness 属性来设置该值。

javascript
// 亮度调整
gui.add(tdtLayer, "brightness", 0, 10, 0.1).name("亮度");
  • 范围:0 至 10。值越大,图像越亮。
  • 使用场景:如果地图图像过于昏暗或者需要突出显示某些区域,可以通过增加亮度来改善视觉效果。

3.2 对比度(Contrast)

对比度控制图像中亮与暗之间的差异。当对比度增加时,明暗差异更为鲜明;而对比度减小时,图像则显得更加平淡。

javascript
// 对比度调整
gui.add(tdtLayer, "contrast", 0, 3, 0.01).name("对比度");
  • 范围:0 至 3。值越大,对比度越高。
  • 使用场景:如果影像图层的细节不够突出,可以通过增加对比度让图像更加清晰。

3.3 色调(Hue)

色调调整影响图像的颜色平衡。通过色调旋转,可以使整个图像在颜色空间中旋转,从而改变图像的色彩。

javascript
// 色调调整
gui.add(tdtLayer, "hue", 0, Math.PI * 2, 0.01).name("色调");
  • 范围:0 至 2π(约 6.28)。色调的变化范围通常是从 0 到 2π。
  • 使用场景:当你希望将地图的颜色调整为特定的色调时,使用色调调节。例如,你可能希望将地图的色调从绿色调整为蓝色。

3.4 饱和度(Saturation)

饱和度控制图像中颜色的浓度。高饱和度使颜色更加鲜艳,而低饱和度则会让颜色变得更为灰暗。

javascript
// 饱和度调整
gui.add(tdtLayer, "saturation", 0, 5, 0.01).name("饱和度");
  • 范围:0 至 5。值越高,颜色越鲜艳;值越低,颜色越灰暗。
  • 使用场景:如果地图图像颜色过于鲜艳,可以降低饱和度以获得更为自然的效果,或者提高饱和度来增强视觉冲击力。

3.5 伽马矫正(Gamma Correction)

伽马矫正用于调整图像的亮度非线性,通常用于改善图像的暗部细节。伽马值控制了亮度分布的曲线。

javascript
// 伽马矫正调整
gui.add(tdtLayer, "gamma", 0, 10, 0.01).name("伽马矫正");
  • 范围:0 至 10。较高的伽马值会使图像的暗部更加明亮,而较低的伽马值则会保留更多的阴影细节。
  • 使用场景:伽马矫正特别适合用于提高图像的暗部可见度,或在过曝的图像中恢复细节。

4. 完整的图层风格调整代码


let tdtType = "img_w";  // 图层类型

let url = `https://t{s}.tianditu.gov.cn/DataServer?T=${tdtType}&x={x}&y={y}&l={z}&tk=${tdtKey}`;
const layerProvider = new Cesium.UrlTemplateImageryProvider({
  url: url,
  subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],  // 多级域名优化请求
  tilingScheme: new Cesium.WebMercatorTilingScheme(),    // 使用WEB墨卡托图块方案
  maximumLevel: 18,  // 最大缩放级别
});
let tdtLayer = new Cesium.ImageryLayer(layerProvider);
viewer.imageryLayers.add(tdtLayer);  // 将图层添加到 viewer 中

// 调整图层的风格
gui.add(tdtLayer, "brightness", 0, 10, 0.1).name("亮度");
gui.add(tdtLayer, "contrast", 0, 3, 0.01).name("对比度");
gui.add(tdtLayer, "hue", 0, Math.PI*2, 0.01).name("色调");
gui.add(tdtLayer, "saturation", 0, 5, 0.01).name("饱和度");
gui.add(tdtLayer, "gamma", 0, 10, 0.01).name("伽马矫正");

5. 总结

通过 Cesium 提供的各种图层属性,我们可以对影像图层进行多维度的调整,包括亮度、对比度、色调、饱和度和伽马矫正。这些调整可以帮助我们根据具体需求,改善地图的可视效果,使其更加适合分析或展示。结合 GUI 工具(如 dat.GUI),我们可以实时地调整这些参数,获得最佳的视觉效果。

在实际应用中,可以根据不同的地图服务或需求调整这些属性,达到理想的视觉呈现效果。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注