Cesium编程中级(十一)Cesium terrain
目录
Cesium terrain
生成 terrain
- 环境配置:
-
- 源码下载
下载地址:https://github.com/ahuarte47/cesium-terrain-builder/tree/master-quantized-mesh - gdal: ./GDAL212
- zlib: ./ZLIB
- 编译:cmake:
注意修改黄色部分为你自己的路径。
打开项目后,修改如下文件:
ctb-GDALTiler.cpp (250 行):
poSrcOvrDS = GDALCreateOverviewDataset( poSrcDS, iOvr, FALSE);
替换成poSrcOvrDS = GDALCreateOverviewDataset( poSrcDS, iOvr, FALSE, FALSE);
ctb-GlobalGeodetic.cpp (30 行):
srs.importFromEPSG(4326);
替换成srs.SetWellKnownGeogCS("WGS84");
随后直接编译整个项目即可。 - 运行:首先将 build/src/Release 下所有文件拷贝到 build/tools/Release 下。随后将依赖的 gdal、zlib等 dll 拷贝到该文件夹下。在 Release 文件夹下打开命令行,并输入命令:
ctb-tile --output-dir E:\xy\doc\Result -f Mesh E:\xy\doc\dem\dem.tif
其中 E:\xy\dem\result 为输出目录(绝对路径),可修改为你自己的, -f Mesh 表示输出格式为 Mesh, E:\xy\dem\dem.tif 为目标 DEM(绝对路径),还可添加参数 –thread-count 1 表示只启动一个进程方便调试。
如下图所示即完成:
- 源码下载
-
生成 layer.json
- 按上述配置完环境后,继续在命令行中输入:
ctb-tile --output-dir E:\xy\doc\Result -l E:\xy\doc\dem\dem.tif
配置服务
- 配置 Go 语言环境:下载地址:http://download.csdn.net/detail/defonds/9408855
配置环境变量:
– GOROOT:”D:\Go\” 安装目录
– GOPATH:”E:\godata\” 自定义工作目录
– Path: 添加:”D:\Go\bin” 安装目录 bin 目录
可在命令行输入 go env
查看结果:如下图为我的电脑配置:
再输入命令:go get github.com/geo-data/cesium-terrain-server/cmd/cesium-terrain-server
,将下载 cesium-terrain-server.exe 到本地,(我已经下载,到 Release 文件夹中,可直接使用)
- 启动服务
将 Result 文件夹中的数据拷贝到 \Release\data\tilesets\terrain\srtm 下,命令行中输入命令:cesium-terrain-server -dir E:\xy\doc\Release\data\tilesets\terrain\srtm -port 8080
即可,如下图表示成功:
<!DOCTYPE html> <html lang="en"> <head> <!-- Use correct character set. --> <meta charset="utf-8"> <!-- Tell IE to use the latest, best version. --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Make the application on mobile take up the full browser screen and disable user scaling. --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <title>Hello World!</title> <script src="../Build/Cesium/Cesium.js"></script> <style> @import url(../Build/Cesium/Widgets/widgets.css); html, body, #cesiumContainer { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; } </style> </head> <body> <div id="cesiumContainer"></div> <script> var worldTerrain = new Cesium.CesiumTerrainProvider({ url: "http://localhost:8080/tilesets/srtm", requestWaterMask: true, requestVertexNormals: true }); var viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider:worldTerrain }); viewer.camera.flyTo({ destination: Cesium.Rectangle.fromDegrees(113.2332549943128726,24.7564554334862272,113.2589865359886261,24.7633767371418578) }); viewer.scene.globe.enableLighting = true; </script> </body> </html>