Skip to content

影像与地形怎样叠合 ​

山脉的照片看上去有阴影,并不说明地球表面已经有山。影像(imagery)提供表面颜色,地形(terrain)提供表面几何。倾斜相机后,照片里的山如果仍是一张平滑表面,缺少的是地形几何;给影像加对比度解决不了这个问题。

Provider 负责取数据,Layer 负责显示 ​

影像提供器知道如何根据瓦片坐标获得图像;ImageryLayer 将提供器接入地球,并管理透明度、亮度和可见性。以下诊断底图由程序生成,不需要远程瓦片服务。

以下是接在第二课初始化之后的功能片段,沿用已经导入的 Cesium 命名空间和已创建的 viewer,省略容器与初始化代码。

js
const provider = new Cesium.TileCoordinatesImageryProvider({
  tilingScheme: new Cesium.GeographicTilingScheme(),
});
const layer = viewer.imageryLayers.addImageryProvider(provider);
layer.alpha = 0.85; // 无量纲不透明度:0全透明,1不透明

它把瓦片编号画在地球上,适合理解层级。默认 GeographicTilingScheme 的零级有横向两个、纵向一个瓦片,每加一级沿两个方向细分,因此第 L 级横向有 2×2^L 个瓦片、纵向有 2^L 个;L 是从零开始的非负整数,不是米或角度。瓦片坐标不是经纬度本身;还必须知道层级与分块方案,才能定位到地理范围。

细节随观察尺度变化 ​

相机拉近时,地形与影像需要更精细的数据;拉远时,使用较粗数据通常足够。细节层级(level of detail,LOD)控制不同尺度使用多少细节。地形网格与影像分辨率(resolution,每个样本覆盖的空间范围)可以不同,也可能来自不同服务。某片区域暂时模糊,可能是高层级资源尚未准备好,不能立即归因于坐标错误。

访问远程服务时,要同时检查投影、瓦片编号方向、覆盖范围、最大层级、跨域响应与授权方式。UrlTemplateImageryProvider 能表达 URL 模板,但不会自动把任意服务变成兼容的 XYZ 瓦片。地图上出现颠倒图像时,先检查 Y 方向与服务约定。

地形采样同样有层级与可用性。某个位置暂时还没有精细地形,不代表真实高程为零。需要确定高程值时,应等待相应采样任务完成,并保留异常与无覆盖状态。

地球的数据层EXPERIMENT 04 · CESIUM 1.145.0

地球的数据层

分开控制影像、经纬网和地表高度。

在浏览器本地运行 · 无需账号 · 鼠标拖动旋转,滚轮缩放

底图:Natural Earth II(公共领域);其余几何和地形为教学合成。 数据说明
查看运行源码

此代码直接读取实际运行的实验模块。按 kind 分支定位当前实验,也可查看数据公式和 GLSL。

读取源码…

观察任务: 打开“启用合成地形”,把“地形高度夸张”从 1 调到 10,再关闭“显示公开底图”,从低角度看山脊。这个山地形状是照片产生的,还是几何产生的?

展开解释

关闭影像后,合成山地仍有起伏,因为高度来自程序生成的地形网格。该地形是教学用公式,不代表当地真实山脉。影像自身不会改变几何轮廓;视觉上有阴影只是图片内容,不能证明高度数据已经参与渲染。

官方延伸:ImageryLayer 图层控制、TileCoordinatesImageryProvider。

气象学 · 数学基础 · 地理可视化