Cesium案例解析(二)——ImageryLayers影像圖層


1. 概述

Cesium支持加載影像圖層,主要是各種地圖服務。這里就通過Cesium實現添加影像地圖和中文注記。

2. 實例

2.1. ImageryLayers.html

HTML的代碼比較簡單,主要還是導入了組件cesium.js及其樣式表widgets.css,兩者都來自於cesium源代碼;然后創建了一個名為cesiumContainer的div圖層,並設定其樣式;最后是導入了自己寫的JS代碼ImageryLayers.js。

<!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>

2.2. ImageryLayers.js

2.2.1. 代碼

//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)
}));

2.2.2. 解析

默認情況下,當創建Cesium.Viewer的時候,就包含了一個在線Bing影像地圖圖層,顯式的創建形式如下:

//默認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():

//全球影像中文注記服務
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參數
圖1:Cesium.ImageryLayer參數

除此之外,還可以直接把一張本地(域內)的圖片作為圖層添加到特定的位置,是通過另外一個創建Cesium.ImageryLayer的接口Cesium.SingleTileImageryProvider()實現的:

imageryLayers.addImageryProvider(new Cesium.SingleTileImageryProvider({
    url : '../images/Cesium_Logo_overlay.png',
    rectangle : Cesium.Rectangle.fromDegrees(113.6833, 29.99667, 115.0833, 31.51667)
}));

3. 結果

在瀏覽器運行,得到影像地圖和中文標注:

中文標注
圖2:中文標注

本地的圖片被放到特定的位置,我這里放到了武漢市附近:

加載本地圖片
圖3:加載本地圖片

這個示例一定要注意Cesium自帶的Bing地圖和天地圖都要申請對應的key才能正常顯示,這里我把我自己申請的key略去了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM