示例准备:
在Cesium ion官网(https://cesium.com/)上注册用户,获取AccessToken,在js代码入口设置Cesium.Ion.defaultAccessToken,即可正常使用Cesium内置的影像和地形服务。
HelloWorld示例:
1、替换了cesium内置的影像和地形服务;
1 //bing map 2 var bingMap = new Cesium.ProviderViewModel({ 3 name: \'Bing Maps Aerial\', 4 iconUrl: \'./SampleData/bingAerial.png\', 5 tooltip: \'Bing Maps aerial imagery\', 6 category: \'Cesium ion\', 7 creationFunction: function() { 8 return new Cesium.BingMapsImageryProvider({ 9 url: \'https://dev.virtualearth.net\', 10 key: binmapToken, 11 mapStyle: Cesium.BingMapsStyle.AERIAL 12 }) 13 } 14 }) 15 //Tianditu 16 var tiandiMap = new Cesium.ProviderViewModel({ 17 name: \'Tiditu\', 18 iconUrl: \'./SampleData/fire.png\', 19 tooltip: \'Tiditu image\', 20 category: \'Cesium ion\', 21 creationFunction: function() { 22 return new Cesium.WebMapTileServiceImageryProvider({ 23 //调用影像服务 24 url: "http://t1.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&" + 25 "TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&tk=" + tidituToken 26 }) 27 } 28 }) 29 //google map 30 var googleMap = new Cesium.ProviderViewModel({ 31 name: \'Goolge Map\', 32 iconUrl: \'./SampleData/fire.png\', 33 tooltip: \'Google image\', 34 category: \'Cesium ion\', 35 creationFunction: function() { 36 return new Cesium.UrlTemplateImageryProvider({ 37 //调用影像服务 38 url: "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}" 39 }) 40 } 41 }) 42 //自己下载的瓦片 43 var customMap = new Cesium.ProviderViewModel({ 44 name: \'Offline Map\', 45 iconUrl: \'./SampleData/fire.png\', 46 tooltip: \'Offline image\', 47 category: \'Cesium ion\', 48 creationFunction: function() { 49 return new Cesium.UrlTemplateImageryProvider({ 50 //调用影像服务 51 url: "http://localhost/www/Johannesburg/{z}/{x}/{y}.png" 52 }) 53 } 54 }) 55 56 //添加自定义地形选择控件 57 var customTerrain = new Cesium.ProviderViewModel({ 58 name: \'myTerrain\', 59 iconUrl: \'./SampleData/fire.png\', 60 tooltip: \'custom terrain\', 61 category: \'Cesium ion\', 62 creationFunction: function() { 63 return new Cesium.CesiumTerrainProvider({ 64 url: \'http://localhost/www/n39w119\', 65 requestVertexNormals: true 66 }) 67 } 68 }) 69 var terrainModels = Cesium.createDefaultTerrainProviderViewModels(); 70 terrainModels.push(customTerrain); 71 var viewer = new Cesium.Viewer(\'cesiumContainer\', { 72 animation: false, //去掉动画空间 73 timeline: false, //去掉时间线控件 74 imageryProviderViewModels: [bingMap, tiandiMap, googleMap, customMap], 75 terrainProviderViewModels: terrainModels 76 }); 77 //去除水印 78 viewer._cesiumWidget._creditContainer.style.display = "none"; 79 //显示帧率信息 80 viewer.scene.debugShowFramesPerSecond = true;
自定义地形数据n39w119从https://apps.nationalmap.gov/3depdem/网站下载的美国某一片高程数据。
下载的数据为ErdasIMG格式的,在QGIS(或ArcGIS)中转为TIFF格式,然后使用cesiumlab(https://www.cesiumlab.com/)的地形处理工具切成cesium支持的.terrain离散文件,部署在服务器上即可访问。
global_tms为从cesiumlab交流群下载的乔峰地球上下载的.terrain离散文件,地形精度较低,测试用。

2、增加显示鼠标位置的经纬高信息;
1 <div id="cesiumContainer"> 2 <div id="coords" style="position: absolute;z-index: 1000;color: red;"></div> 3 </div> 4 5 //显示坐标 6 var canvas = viewer.scene.canvas; 7 var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); 8 handler.setInputAction(function(movement) { 9 var cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition, ellipsoid); 10 var ellipsoid = viewer.scene.globe.ellipsoid; 11 if(cartesian) { //能获取,显示坐标 12 var cartographic = ellipsoid.cartesianToCartographic(cartesian); 13 14 var terrainLevel = level; 15 var promise = Cesium.sampleTerrain(viewer.terrainProvider, terrainLevel, [cartographic]); 16 Cesium.when(promise, function(updatedPositions) { 17 if(updatedPositions.length > 0) { 18 var coords = \'经度\' + Cesium.Math.toDegrees(cartographic.longitude).toFixed(2) + \', \' + 19 \'纬度\' + Cesium.Math.toDegrees(cartographic.latitude).toFixed(2) + \', \' + \'高度\' + (updatedPositions[0].height ? updatedPositions[0].height : 0); 20 document.getElementById(divId).innerHTML = coords; 21 document.getElementById(divId).style.display = \'\'; 22 } else { 23 document.getElementById(\'coords\').style.display = \'none\'; 24 } 25 }); 26 27 } else { //不能获取不显示 28 document.getElementById(\'coords\').style.display = \'none\'; 29 } 30 }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
注意“coords"的div中的z-index的设置。
3、加载了天地图的注记服务;
1 viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({ 2 //调用中文注记服务 3 url: "http://t2.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&" + 4 "TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&tk=" + tidituToken 5 }));
4、加载多边形实体;
1 viewer.entities.add({ 2 polygon: { 3 hierarchy: Cesium.Cartesian3.fromDegreesArray([-109.080842, 45.002073, -105.91517, 45.002073, -104.058488, 44.996596, -104.053011, 43.002989, -104.053011, 41.003906, -105.728954, 40.998429, -107.919731, 41.003906, -109.04798, 40.998429, -111.047063, 40.998429, -111.047063, 42.000709, -111.047063, 44.476286, -111.05254, 45.002073]), 4 heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, 5 material: Cesium.Color.RED.withAlpha(0.5), 6 outline: true, 7 outlineColor: Cesium.Color.BLACK 8 } 9 })
最后效果: