• home > GIS > cesium >

    Cesium笔记(4):terrainProvider地形控件STK World Terrain和Small Terrain

    Author:zhoulujun Date:

    cesiumjs中可定制多种图层,可以使用互联网上很多地图提供商的图层数据,也可以使用自己的地图数据。Cesium支持多种标准化格式的GIS瓦片服

    Cesium支持流动的海洋与有真实高度差的山峰,这个就需要地形图

    cesiumjs地形图

    cesiumjs中的地形系统是一种由流式瓦片数据生成地形mesh的技术

    cesiumjs支持两种类型的地形,STK World Terrain和Small Terrain。

    http://cesiumjs.org/data-and-assets/terrain/formats/quantized-mesh-1.0.html

    STK World Terrain

    STK World Terrain是高分辨率, 基于quantized mesh的地形。这是一种基于网格的地形,可充分利用GL中的Shader来渲染,效果相当逼真。

    STK World Terrain使用了多种数据源,分别适应不同地区和不同精度时的情形。比如对于美国本土使用National Elevation Dataset (NED)的高程,精度3-30米;对于欧洲使用EU-DEM高程,精度30米;对于澳洲使用Australia SRTM-derived 1 Second DEM高程,精度30米;对于-60至60纬度段使用CGIAR SRTM高程,精度90米;对于整个地球使用GTOPO30,精度1000米。STK World Terrain地形是怎样生成的是不公开的,如需应用于封闭的局域网时,则需购买AGI的STK terrain server。但是AGI提供了一个webapi可供因特网上调用,并提供了这种地形的格式细节,期待早日有高手作出一个转换工具。

    Small Terrain

    Small Terrain是中等高分辨率,基于heightmap的地形,渲染出的地形效果不如quantized mesh的地形,但也基本能接受。网上已经有一些开源的生成工具可以由DEM数据生成这种规范的.terrain文件,因此我们重点讨论这种类型的地形。

      生成工具是cesium googlegroup里一个俄国人提供的gdal2srtmtiles.py(https://groups.google.com/forum/#!topic/cesium-dev/rBieaEBJHiU),需要gdal库和numpy。

    具体用法 python gdal2srtmtiles.py --cesium  -z 0-15 -p geodetic ‘YN_DEM.tif', 'I:\\tilesCache\\terrain_tiles'

    YN_DEM.tif是输入地形源文件,是一个geotiff格式的高程数据,网络上有很多免费的高程数据,比较著名的SRTM90的,ASTER30的,都可以用作输入的地形数据源。terrain_tiles是生成的地形瓦片所在的目标目录,

    • -z 0-15参数表示zoom为0到15级,级别越高越详细,数据量也越大。

    • -p geodetic暂时不知道,估计与投影相关

    • --cesium表示生成cesium特定的地形。

    生成过程时间长短与源数据的大小有关,楼主的YN_DEM.tif覆盖云南全境的30米精度ASTER DEM,1G多大小,头一天下班时运行,第二天下午生成完毕,8G多的瓦片,0-15级。

      发布为地形服务很简单,不需要任何服务器端编程知识,把terrain_tiles配置到webserver的Webroot下的一个子目录就行,同时要把.terrain这种文件的Content-Type设为'application/octet-stream'加到web服务器的配置中,服务器端就算搞定。

    client端就更简单了,viewer中有个terrainProvider属性,直接new一个CesiumTerrainProvider就行。

    var viewer = new Cesium.Viewer('cesiumContainer',{
      terrainProvider:new Cesium.CesiumTerrainProvider({
        url: "http://localhost:88/terrain_tiles"
      })
    })

    国内的有超图的:加载地形数据操作手册——

    http://support.supermap.com.cn:8090/webgl/examples/TopicDoc/LoadTerrain_OperateTopic.html

    cesium添加山峰与海洋

    //山峰山形地形
    var mountainTerrainProvider = new Cesium.CesiumTerrainProvider({
        url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
    });
    viewer.terrainProvider = mountainTerrainProvider;
    //水纹
    var waterTerrainProvider = new Cesium.CesiumTerrainProvider({
        url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
        requestWaterMask: true////请求水波纹效果
    });
    viewer.terrainProvider = waterTerrainProvider;
    //光照
    var terrainProvider = new Cesium.CesiumTerrainProvider({
        url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
        requestVertexNormals: true//请求照明
    });
    viewer.terrainProvider = terrainProvider;
    viewer.scene.globe.enableLighting = true;//开启照明

    cesium山形3d效果cesium水纹效果cesim光照效果


    参看文章:

    cesiumjs开发实践 (四) https://blog.csdn.net/happyduoduo1/article/details/51942849

    Cesium学习笔记(三): 图像层(Imagery Layers)和地形(Terrain) https://blog.csdn.net/UmGsoil/article/details/74453402




    转载本站文章《Cesium笔记(4):terrainProvider地形控件STK World Terrain和Small Terrain》,
    请注明出处:https://www.zhoulujun.cn/html/GIS/cesium/8329.html