cesium 之加载地形图 Terrain 篇

2,282 阅读1分钟

内容概览

1.基于cesium 实现地形图 Terrain 效果
2.源代码 demo 下载

本篇实现 cesium 加载地形图 Terrain 功能,效果图如下:

  • cesium 支持地形图数据格式
    Quantized-mesh ,Cesium团队提供的开发的格式
    Heightmap,Google Earth Enterprise

  • cesium 加载地形图类 CesiumTerrainProvider
    cesium 中添加地形数据,我们创建一个 CesiumTerrainProvider, 指定一个 URL 地址和一些配置的选项,然后讲它分配给一个 viewer.terrainProvider。在这个实例中,我们可以使用 createWorldTerrain 辅助功能创建一个 Cesium 世界地形。
    核心代码:

    //Cesium动态叠加地形图 MapConfig.terrainObj = {url:"//assets.agi.com/stk-terrain/world",requestWaterMask:false,requestVertexNormals:false,proxyUrl:""}; MapConfig.terrainObj = {url:"http://localhost:8180/cesium/worldTerrain",requestWaterMask:false,requestVertexNormals:false,proxyUrl:""};

    /** * 添加地形图图层 * @method addTerrainLayer * @param url 地形图url proxyUrl 代理请求url * @return / addTerrainLayer: function (terrainObj) { if (terrainObj.url && terrainObj.url.replace(/(^s)|(s*$)/g, "").length >0) { var provider ={}; if(terrainObj.proxyUrl && terrainObj.proxyUrl.length>0) provider = {proxy:new Cesium.DefaultProxy(terrainObj.proxyUrl),url:terrainObj.url,requestWaterMask:terrainObj.requestWaterMask,requestVertexNormals:terrainObj.requestVertexNormals}; else provider = {url:terrainObj.url,requestWaterMask:terrainObj.requestWaterMask,requestVertexNormals:terrainObj.requestVertexNormals};

            var terrainProvider = new Cesium.CesiumTerrainProvider(provider);
            this.cesiumViewer.terrainProvider = terrainProvider;
        }
    }
    

RequestWaterMask 和 requestVertexNormals 的配置选项,是告诉 Cesium 需要额外的获取水和照明效果。默认情况下他们设置是 false。

  • cesium 加载地形图模式:在线以及离线1. 第一行
  1. 在线模式,这个最简单,cesium 官网直接提供在线 url://assets.agi.com/stk-terrain…
    最新cesium版本的在线地形加载改为:

    var viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider : Cesium.createWorldTerrain() });

  2. 离线模式,制作离线地形图数据需要现成的 dem 数据,比图 tif 格式的,然后利用转换工具来制作,转换工具我这里用的是 cesiumlab 在线模式转换工具:Cesium 的万花筒
    具体的教程,cesiumlab 官网有操作步骤教程;
    转换之后数据源格式如下:


link==>