1. 参考资料
官方api:https://cesium.com/learn/cesiumjs/ref-doc/
教程:https://cesium.com/learn/cesiumjs-learn/cesiumjs-quickstart/
网上例子:https://github.com/jiawanlong/Cesium-Examples
mark3d库的文档:http://mars3d.cn/dev/guide/data/xyz.html(虽然不是写cesium的,但知识都是通的,讲的很好)
2. 加载地形和贴片
2.1 什么是地形(terrain)
就是高度信息,cesium加载后可以在地表生成起伏的地面效果,如下图

2.2 获取地形数据
2.2.1 首先要获取dem的数据

以https://www.gscloud.cn/为例:目前免费的只有30m的精度。
而且这里的高度是包含建筑物的,非地表高度(实测)

2.2.2 使用工具将dem的tif数据转成切片
cesium定义了一个terrain的数据格式quantized-mesh:
https://github.com/CesiumGS/quantized-mesh
有人已经实现了:
https://github.com/ahuarte47/cesium-terrain-builder/tree/master-quantized-mesh
功能主要是利用gdal库将tif栅格图片转成quantized-mesh.
测试过,可以用。
注意哈,这个人实现的代码在上github地址的一个分支上。
生成的数据大概如下:

2.3 地形服务器
这个简单,直接用nginx
https://github.com/geo-data/cesium-terrain-builder/issues/96
2.4 什么是贴片(影像切片)
贴片是一张图片,覆盖在地形上,如果没有贴片,地图上显示的是全蓝
贴片有免费的数据,而且可以多种数据叠加。我推荐使用高德的
下面的示例代码,使用了两个贴片的叠加的效果
因为高德的坐标不是wgs84,需要转换
_//高德贴图_
const amapLayer = new Cesium.UrlTemplateImageryProvider({
url: "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
minimumLevel: 1,
maximumLevel: 18,
credit: "© 高德地图",
tilingScheme: new GCJ02TilingScheme(),
});
_viewer_?.imageryLayers.addImageryProvider(amapLayer);
_//高德标题_
const amaptitleLayer = new Cesium.UrlTemplateImageryProvider({
url: "https://webst02.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}",
minimumLevel: 1,
maximumLevel: 18,
credit: "© 高德地图",
tilingScheme: new GCJ02TilingScheme(),
});

但是Viewer只用一个坐标系统,这就导致百度地图(BD09坐标系统)、高德地图(火星坐标系统)、腾讯地图(火星坐标系统)不能与天地图(接近于WGS84坐标系统的China2000)无偏移叠加。这就导致底图切换没有什么意义。
2.5 如何自己生成影像切片
比如无人机正投影拍的影像切片也是tif格式,如何生成cesium可用的切片呢?
直接用gdal的工具即可,很方便
gdal2tiles.py -z 14-22 -d ./input/result.tif ./output/image
3. 坐标系
3.1 ECEF坐标系
也叫地心地固直角坐标系。其原点为地球的质心,x轴延伸通过本初子午线(0度经度)和赤道(0deglatitude)的交点。 z轴延伸通过的北极(即,与地球旋转轴重合)。 y轴完成右手坐标系,穿过赤道和90度经度。

3.2 WGS-84坐标
也就是也叫经纬高坐标系(经度(longitude),纬度(latitude)和高度(altitude)LLA坐标系)。,全球地理坐标系、大地坐标系。可以说是最为广泛应用的一个地球坐标系,它给出一点的大地纬度、大地经度和大地高程而更加直观地告诉我们该点在地球中的位置,故又被称作纬经高坐标系。WGS-84坐标系的X轴指向BIH(国际时间服务机构)1984.0定义的零子午面(Greenwich)和协议地球极(CTP)赤道的交点。Z轴指向CTP方向。Y轴与X、Z轴构成右手坐标系。
(1):大地纬度是过用户点P的基准椭球面法线与赤道面的夹角。纬度值在-90°到+90°之间。北半球为正,南半球为负。
(2):大地经度是过用户点P的子午面与本初子午线之间的夹角。经度值在-180°到+180°之间。
(3):大地高度h是过用户点P到基准椭球面的法线距离,基准椭球面以内为负,以外为正。

3.3 东北天坐标系(ENU)
也叫站心坐标系以用户所在位置P为坐标原点。
坐标系定义为: X轴:指向东边 Y轴:指向北边 Z轴:指向天顶
3.4 旋转

4. 第三方免费工具:
QGIS