Cesium中数据加载包括ArcGIS在线地图、Bing地图、天地图、高德地图、OpenStreetMap、MapBox影像图等,ESRL、超图、中地数码等大型 GIS 厂商提供的自定义格式的 GIS数据,以及 GeoJSON、TIFF、SHP、KML、点云、三维模型等各种格式的 GIS 数据。
3.1 影像加载
Cesium提供了ImageryLayerCollection类、ImageryLayer 类及相关的ImageryProvider 类来加载不同的影像图层。ImageryLayer 类用于承载 Cesium 中的影像图层,并利用 ImageryProvider 类为其提供的丰富的数据源在场景中进行展示。而ImageryProvider类及其子类封装了加载各种网络影像图层的接口,可以用于加载 Bing 地图、天地图、ArcGIS 在线地图、高德地图、OSM 影像MapBox影像等数据源。
3.1.1 加载Bing 地图
Cesium 提供了 BingMapsImageryProvider 类来加载 Bing地图,并且默认加载了微软公司的 Bing 地图。也就是说,在创建 Vewer 时,如果不指定ImageryProvider 类,就默认加载 Bing地图。
在加载 Bing地图时,需要申请 Bing地图密钥或者申请Cesium的token,否则可能会出现加载完成后没有地图出现的情况。以申请Cesium的 token 为例,首先进入 Cesium ion 官网在注册并登录后,申请 token,如下图所示。
Bing Map申请key值页面(Redirecting)
Cesium ion 官网注册登录页面(Cesium ion)
Cesium ion 官网tocken申请页面
在创建 Viewer 之前,添加一行代码“Cesium.Ion,defaultAccessToken='你的 token'”,即可默认加载 Bing 地图。加载 Bing 地图的效果如下图所示:
<div id="cesiumContainer"></div>
<script type="module">
Cesium.Ion.defaultAccessToken = '你的token';
const viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: true,
homeButton: false,
//是否显示首页位置工具
sceneModePicker: false,
//是否显示视角模式切换工具//是否显示默认图层选择工具//是否显示导航帮助工具
baseLayerPicker: true,
navigationHelpButton: false,
animation: false,
//是否显示动画工具
timeline: false,
//是否显示时间轴工具
fullscreenButton: false
//是否显示全屏按钮工具
terrain: Cesium.Terrain.fromWorldTerrain(),
});
bingMap加载关键代码
默认加载bingmap地图
3.1.2 加载天地图
天地图地图服务支持HTTP和HTTPS协议。天地图地图服务采用OGC WMTS标准,具体使用方法请参考OGC WMTS标准 中GetCapabilities 和GetTile。天地图地图服务对所有用户开放。使用本组服务之前,需要申请Key。Cesium 提供了WebMapTileServicelmageryProvider 类来调用天地图的地图服务。天地图Web服务API为用户提供HTTP/HTTPS接口,即开发者可以通过这些接口使用各类型的地理信息数据服务,可以基于此开发跨平台的地理信息应用Web服务API对所有用户开放。在天地图官网中,可以査看矢量底图、矢量注记、影像底图、影像注记、地形渲染等多种地图的服务地址,
Cesium.Ion.defaultAccessToken = 'cesium的token';
const KEY = "天地图的key"
const viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: true,
homeButton: false,
//是否显示首页位置工具
sceneModePicker: true,
//是否显示视角模式切换工具//是否显示默认图层选择工具//是否显示导航帮助工具
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
//是否显示动画工具
timeline: false,
//是否显示时间轴工具
fullscreenButton: false,
imageryLayers: new Cesium.WebMapTileServiceImageryProvider({
url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
layer: "tdtVecBasicLayer",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "GoogleMapsCompatible"
})
});
Cesium.Ion.defaultAccessToken = 'cesium的token';
const KEY = "天地图的key"
const viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: true,
homeButton: false,
//是否显示首页位置工具
sceneModePicker: true,
//是否显示视角模式切换工具//是否显示默认图层选择工具//是否显示导航帮助工具
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
//是否显示动画工具
timeline: false,
//是否显示时间轴工具
fullscreenButton: false,
});
//矢量底图
viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
layer: "tdtVecBasicLayer",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "GoogleMapsCompatible"
}));
//矢量注记
viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
url: "http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + KEY,
layer: "tdtAnnoLayer",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "GoogleMapsCompatible"
}));
//影像底图
viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
url: "http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
layer: "tdtBasicLayer",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "GoogleMapsCompatible"
}));
//影像注记
viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
url: "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + KEY,
layer: "tdtAnnoLayer",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "GoogleMapsCompatible"
}));
3.1.3 加载ArcG在线地图
Cesium 提供了ArcGisMapServerlmageryProvider 类来通过 ArcGIS Server REST API 访问
在 ArcGIS MapServer平台上的地图瓦片。在创建 Viewer 时,imageryLayers 配置项通过 ArcGisMapServerlmageryProvider 类传入ArCGIS在线地图URL来访问托管在AreGlS MapServer上的地图瓦片。加载效果如下:
Cesium.Ion.defaultAccessToken = 'cesium的token';
const viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: true,
homeButton: false,
//是否显示首页位置工具
sceneModePicker: true,
//是否显示视角模式切换工具//是否显示默认图层选择工具//是否显示导航帮助工具
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
//是否显示动画工具
timeline: false,
//是否显示时间轴工具
fullscreenButton: false,
//ArcGIS在线地图
imageryLayers: new Cesium.ArcGisMapServerImageryProvider({
//加载ArcGIS 在线地图
url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
})
});
完整代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- Include the CesiumJS JavaScript and CSS files -->
<script src="https://cesium.com/downloads/cesiumjs/releases/1.123/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.123/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
<title>cesium教程第三章数据加载</title>
</head>
<body>
<div id="cesiumContainer"></div>
<script type="module">
Cesium.Ion.defaultAccessToken = 'cesium的token';
const KEY = "天地图的key"
const viewer = new Cesium.Viewer('cesiumContainer', {
geocoder: true,
homeButton: false,
//是否显示首页位置工具
sceneModePicker: true,
//是否显示视角模式切换工具//是否显示默认图层选择工具//是否显示导航帮助工具
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
//是否显示动画工具
timeline: false,
//是否显示时间轴工具
fullscreenButton: false,
//ArcGIS在线地图
imageryLayers: new Cesium.ArcGisMapServerImageryProvider({
//加载ArcGIS 在线地图
url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
})
//天地图
// imageryLayers: new Cesium.WebMapTileServiceImageryProvider({
// url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
// layer: "tdtVecBasicLayer",
// style: "default",
// format: "image/jpeg",
// tileMatrixSetID: "GoogleMapsCompatible"
// })
});
// //矢量底图
// viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
// url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
// layer: "tdtVecBasicLayer",
// style: "default",
// format: "image/jpeg",
// tileMatrixSetID: "GoogleMapsCompatible"
// }));
// //矢量注记
// viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
// url: "http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + KEY,
// layer: "tdtAnnoLayer",
// style: "default",
// format: "image/jpeg",
// tileMatrixSetID: "GoogleMapsCompatible"
// }));
// //影像底图
// viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
// url: "http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + KEY,
// layer: "tdtBasicLayer",
// style: "default",
// format: "image/jpeg",
// tileMatrixSetID: "GoogleMapsCompatible"
// }));
// //影像注记
// viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
// url: "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + KEY,
// layer: "tdtAnnoLayer",
// style: "default",
// format: "image/jpeg",
// tileMatrixSetID: "GoogleMapsCompatible"
// }));
// viewer.camera.flyTo({
// destination: Cesium.Cartesian3.fromDegrees(-122.4175, 37.655, 400),
// orientation: {
// heading: Cesium.Math.toRadians(0.0),
// pitch: Cesium.Math.toRadians(-15.0),
// }
// });
// Add Cesium OSM Buildings, a global 3D buildings layer.
const buildingTileset = await Cesium.createOsmBuildingsAsync();
viewer.scene.primitives.add(buildingTileset);
</script>
</div>
</body>
</html>