Cesium支持加载影像图层,主要是各类地图服务。这里就经过Cesium实现添加影像地图和中文注记。css
HTML的代码比较简单,主要仍是导入了组件cesium.js及其样式表widgets.css,二者都来自于cesium源代码;而后建立了一个名为cesiumContainer的div图层,并设定其样式;最后是导入了本身写的JS代码ImageryLayers.js。html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <meta name="description" content="Create imagery layers from multiple sources."> <meta name="cesium-sandcastle-labels" content="Beginner, Tutorials, Showcases"> <title>Cesium Demo</title> <script type="text/javascript" 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; font-family: sans-serif; background: #000; } </style> </head> <body> <div id="cesiumContainer" class="fullSize"></div> <script src="ImageryLayers.js"></script> </body> </html>
//Add your ion access token from cesium.com/ion/ Cesium.Ion.defaultAccessToken = '你申请的key'; 'use strict'; //默认BING影像地图 var viewer = new Cesium.Viewer('cesiumContainer', { imageryProvider: Cesium.createWorldImagery({ style: Cesium.IonWorldImageryStyle.AERIAL }), baseLayerPicker: false }); //全球影像中文注记服务 var imageryLayers = viewer.scene.imageryLayers; var tdtAnnoLayer = imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({ url: "http://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={TileMatrix}&TILEROW={TileRow}&TILECOL={TileCol}&tk=d99ffacb3eeafd378927c060ab39bdab", layer: "tdtAnnoLayer", style: "default", format: "image/jpeg", tileMatrixSetID: "GoogleMapsCompatible" })); //tdtAnnoLayer.alpha = 0.5; //tdtAnnoLayer.brightness = 2.0; imageryLayers.addImageryProvider(new Cesium.SingleTileImageryProvider({ url : '../images/Cesium_Logo_overlay.png', rectangle : Cesium.Rectangle.fromDegrees(113.6833, 29.99667, 115.0833, 31.51667) }));
默认状况下,当建立Cesium.Viewer的时候,就包含了一个在线Bing影像地图图层,显式的建立形式以下:java
//默认BING影像地图 var viewer = new Cesium.Viewer('cesiumContainer', { imageryProvider: Cesium.createWorldImagery({ style: Cesium.IonWorldImageryStyle.AERIAL }), baseLayerPicker: false });
函数Cesium.createWorldImagery()能够直接建立带标注的图层,只要把这里的AERIAL修改成AERIAL_WITH_LABELS便可。惋惜这里的标注是英文标注。浏览器
能够经过天地图来实现中文注记功能,天地图采用的是OGC的WMTS标准,Cesium中正好提供了相应的接口Cesium.WebMapTileServiceImageryProvider():ide
//全球影像中文注记服务 var imageryLayers = viewer.scene.imageryLayers; var tdtAnnoLayer = imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({ url: "http://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={TileMatrix}&TILEROW={TileRow}&TILECOL={TileCol}&tk=您的密钥", layer: "tdtAnnoLayer", style: "default", format: "image/jpeg", tileMatrixSetID: "GoogleMapsCompatible" })); //tdtAnnoLayer.alpha = 0.5; //tdtAnnoLayer.brightness = 2.0;
能够看到新建的图层被添加到当前场景scene的图层集合对象readonlyimageryLayers中,它是一个Cesium.ImageryLayerCollection对象,用来管理图层对象Cesium.ImageryLayer。经过这个对象,能够设置当前图层的透明度、亮度、对比度等,对于图层的融合特别有用:函数
除此以外,还能够直接把一张本地(域内)的图片做为图层添加到特定的位置,是经过另一个建立Cesium.ImageryLayer的接口Cesium.SingleTileImageryProvider()实现的:ui
imageryLayers.addImageryProvider(new Cesium.SingleTileImageryProvider({ url : '../images/Cesium_Logo_overlay.png', rectangle : Cesium.Rectangle.fromDegrees(113.6833, 29.99667, 115.0833, 31.51667) }));
在浏览器运行,获得影像地图和中文标注:url
本地的图片被放到特定的位置,我这里放到了武汉市附近:scala
这个示例必定要注意Cesium自带的Bing地图和天地图都要申请对应的key才能正常显示,这里我把我本身申请的key略去了。