【Cesium教程第三章数据加载之影像加载】

     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>

### 如何在 Cesium加载影像数据 为了在 Cesium加载影像数据,通常会使用 `Cesium.ImageryLayer` 或者直接利用 `Cesium.TerrainProvider` 和其他相关类来增强地形和影像显示的效果。具体来说,在超图环境下操作时,可以遵循特定的配置流程。 对于超图环境中的 Cesium 应用开发而言,初始化阶段需按照既定的方式引入必要的资源文件[^1]。完成基本设置之后,可以通过如下方法加载影像: #### 使用 ImageryProvider 加载影像层 ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); // 定义影像提供者并创建新的影像层实例 var imageryLayer = new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({ url : 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}' }), {}); // 将新定义好的影像层添加至场景中现有的影像图层集合里 viewer.imageryLayers.add(imageryLayer); ``` 上述代码片段展示了如何通过 URL 模板指定在线瓦片服务地址从而加载全球范围内的卫星图像作为底图展示的一部分。当然也可以替换为本地或其他第三方的地图服务链接以满足不同需求。 当涉及到更复杂的交互逻辑比如移动过程中遇到障碍物处理等问题,则可能需要用到额外的功能模块如 ray 射线来进行碰撞检测等功能扩展[^2]。 #### 配置与优化建议 - **性能考量**:考虑到网络延迟等因素影响用户体验,推荐预先缓存部分常用区域的数据;同时合理调整请求频率避免过度消耗服务器资源。 - **安全性保障**:确保所使用的地图源合法合规,并注意保护用户隐私不泄露敏感位置信息给外部接口调用方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值