数据源
DEM数据预处理
Cesium支持两种格式的地形:一种是quantized-mesh格式的数据,另一种是基于heightmap的DEM。获得的DEM数据源一般为tiff格式,需要进行转换才能由Cesium处理。可用的转换工具有cesiumlab和cesium-terrain-builder,ctb工具可以处理heightmap格式数据,其更新版本ctb-qmesh可以处理quantized-mesh格式数据。
- ctb工具的编译。
- 使用GIS工具软件(GDAL、QGIS、arcMap等)把下载的tiff格式地形文件中的坐标转为WGS84,再将文件中采样中高程数据的nodata异常值使用0或者插值等进行填充。
- 运行ctb-tile.exe将下载的tiff格式地形文件生成为.terrain瓦片文件。
- 运行ctb-tile,添加参数-l生成供cesium使用的地图元数据LAYER.JSON。
cesium配置
- 下载解压cesium,如果使用node提供服务,可直接运行根目录的server.js文件。若使用其他web服务器如nginx,则将解压目录中的build/cesium文件夹复制到nginx根目录,配置nginx.conf文件,添加以下内容: 其中条件语句目的是为了解决cors资源共享问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35server {
listen 8001;
server_name localhost;
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# Custom headers and headers various browsers *should* be OK with but aren't
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
root F:/nginxhtml;
index index.html index.htm;
}
} - 将影像及处理好的地形文件复制到nginx根目录,编辑cesium示例中的helloworld.html文件,添加如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Cesium.Ion.defaultAccessToken = null;
var xaterrain = new Cesium.CesiumTerrainProvider({
url: 'http://localhost:8001/ql-terrain'
});
var tms = Cesium.createTileMapServiceImageryProvider({
url: 'http://localhost:8001/ql-google-sat',
fileExtension: 'jpg'
});
var viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: false,
sceneModePicker: false,
navigationHelpButton: false,
homeButton: false,
timeline: false,
animation: false,
baseLayerPicker: false,
fullscreenButton: false,
//imageryProvider:false,
terrainProvider: xaterrain,
imageryProvider: tms
});
viewer.scene.globe.enableLighting = true;
viewer.scene.debugShowFramesPerSecond = true