Cesium Workshop

參考資料:
https://cesiumjs.org/tutorials/Cesium-Workshop/

https://github.com/geoadmin/workshop-cesium3d
https://github.com/AnalyticalGraphicsInc/cesium-workshop

概述

通過該教程籍铁,能夠大致了解Cesium的功能蛛倦,包括:

  • 配置1個Cesium viewer
  • 加載各種數(shù)據(jù)集
  • 創(chuàng)建幾何和設置樣式
  • 加載3D Tiles
  • 控制相機
  • 添加鼠標交互

1. 設置和準備工作

設置

  • 確認你的瀏覽器支持Cesium
  • 確認已安裝Node.js
  • 下載代碼 $ git clone https://github.com/AnalyticalGraphicsInc/cesium-workshop
  • 切換到cesium-workshop根目錄
  • 使用node.js服務運行web應用
$ npm install
$ npm start
Cesium development server running locally.  Connect to http://localhost:8080

也可以使用python簡易HTTP服務程序運行該web應用:

// Python2
$ python -m SimpleHTTPServer 8080
// Python3
$ python -m http.server 8080

打開瀏覽器离唬,輸入地址: http://localhost:8080
app目錄簡介:

  • index.html - 主頁面. 在本地web server中部署梯轻,打開該文件就可以運行示例程序.
  • Source - 包括index.html中引用的App.js, 這是app的代碼所在位置.
  • ThirdParty - 第三方庫,這里只有CesiumJS庫.
  • server.js - 簡單node.js 服務器程序冗恨,用于運行程序.
  • package.json - node.js 服務器的依賴庫.
  • LICENSE - 授權信息答憔,Apache 2.0.
  • .gitignore - git倉庫中不包括的文件列表.

CesiumJS與現(xiàn)有JavaScript庫和框架兼容,如:

頁面結構:

index.html: Cesium widget本身是1個div,關鍵代碼包括:
包含CesiumJS掀抹,定義Cesium對象

<script src="ThirdParty/Cesium/Cesium.js"></script>

也可以在生產(chǎn)環(huán)境僅僅包含Cesium的某個模塊 ThirdParty/Cesium/Source/ , 以便減少應用大小.
為Cesium Viewer widget創(chuàng)建1個div

<div id="cesiumContainer"></div>

添加app代碼:

<script src="Source/App.js"></script>

在<head>標簽中添加html元素樣式(使用index.css文件)

<link rel="stylesheet" href="index.css" media="screen">

Cesium自帶系列CSS虐拓,也可以引入

@import url(ThirdParty/Cesium/Widgets/widgets.css);

另外的樣式可以用來覆蓋Cesium的CSS.

流程

  1. 使用最喜歡的文本編輯器打開Source/App.js并刪除內容.
  2. 復制 Source/AppSkeleton.jsSource/App.js.
  3. 確認 cesium-workshop 服務正在運行
  4. 線上web瀏覽器和切換到localhost:8080.
  5. 修改Source/App.js 并刷新頁面

創(chuàng)建viewer

任何Cesium應用的基礎都是Viewer, 一個交互的三維球,創(chuàng)建1個viewer并綁定到id 為"cesiumContainer" 的div上.

var viewer = new Cesium.Viewer('cesiumContainer');

默認情況下傲武,場景能夠處理鼠標和觸控輸入事件蓉驹,如相機控制:

  • 鼠標左鍵單擊和拖動 - 在地球表面移動相機.
  • 鼠標右鍵單擊和拖動 - 放大、縮小(相機拉近或拉遠)
  • 鼠標中鍵滾輪 - 放大揪利、縮小
  • 鼠標中鍵單擊和拖動 - 以地球表面某個點旋轉相機

觸控事件:

  • 一個手指拖曳- 平移視圖(One finger drag - Pan view)
  • 兩個手指捏放- 縮放視圖(Two finger pinch - Zoom view)
  • 兩個手指拖曳态兴,相同方向- 俯仰視圖(Two finger drag, same direction - Tilt view)
  • 兩個手指拖曳,相反方向- 旋轉視圖(Two finger drag, opposite direction - Rotate view)

除球外疟位,Viewer還默認提供了一些widget.


默認的Cesium Viewer
  1. 地名搜索 : 地名搜索工具瞻润,相機飛行到查詢地點. 默認使用Bing Maps數(shù)據(jù).
  2. 默認視圖 : 視圖復位,回到默認視圖.
  3. 場景模式 : 切換模式3D, 2D 或2.5D (Columbus View).
  4. 基礎圖層 : 選擇影像或地形圖層.
  5. 幫助 : 幫助甜刻,提供默認相機控制方法.
  6. 動畫 : 控制動畫播放速度.
  7. 鳴謝 : 顯示數(shù)據(jù)歸屬.
  8. 時間線 : 指示當前時間绍撞,允許用戶跳到指定時間.
  9. 全屏 : 全屏.

這些widget的顯示可以在創(chuàng)建Viewer時進行配置,詳細參數(shù)見Viewer文檔

var viewer = new Cesium.Viewer('cesiumContainer', {
    scene3DOnly: true,
    selectionIndicator: false,
    baseLayerPicker: false
});

Cesium ion

Cesium ion是一個三維數(shù)據(jù)切片和存儲的平臺,這里使用ion平臺上存儲的Sentinal-2 影像和Cesium World Terrain.
需要訪問https://cesium.com/ion/ 注冊一個免費賬戶得院,并在Access Tokens頁面創(chuàng)建訪問令牌.
Cesium ion默認提供5GB存儲空間.

在創(chuàng)建viewer之前設置訪問令牌:

Cesium.Ion.defaultAccessToken = '<YOUR ACCESS TOKEN HERE>';

添加影像圖層

Cesium支持影像圖層的添加傻铣、刪除、排序祥绞、調整.
每個圖層的亮度(brightness)矾柜、對比度(contrast)阱驾、灰度(gamma)就谜、色相(Hue)怪蔑、 飽和度(Saturation)都支持動態(tài)調整.

Cesium提供影像圖層操作的很多方法,包括顏色調整(color adjustment)丧荐、圖層混合(layer blending)等. 代碼示例:

Cesium提供了多個影像圖層提供者缆瓣,包括:

其他內置影像圖層提供者

當然,也可以通過實現(xiàn)[ImageryProvider接口 定義新的影像接入方式珠增。以 SingleTileImageryProvider 為例簡要介紹:

  • url - 圖片的url t. Like many imagery providers, this is the only required property. In other imagery providers this url points to the server or the root url of the service.
  • extent - An optional longitude-latitude rectangle that the image should cover. The default is to cover the entire globe.
  • credit - An optional string crediting the data source, which is displayed on the canvas. Some imagery providers, like BingMapsImageryProvider and ArcGIS Server REST API, get a credit logo or string directly from their service.
  • proxy - An optional proxy to use for requests to the service, which brings us to Cross-Origin Resource Sharing.
  • Tile coordinates - Shows how the globe is divided into tiles in a particular tiling scheme by drawing a border around each tile and labeling it with its level, X, and Y coordinates.

示例 - 使用Ion平臺的Sentinel-2影像:

// Remove default base layer
viewer.imageryLayers.remove(viewer.imageryLayers.get(0));
// Add Sentinel-2 imagery
viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId : 3954 }));

示例 - 加載ArcGIS Rest影像,打開Hello_world超歌,使用以下代碼更換:

var viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider : new Cesium.ArcGisMapServerImageryProvider({
        url : '//services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
    }),
    baseLayerPicker : false
});

示例 - 添加TMS影像

var layers = viewer.scene.imageryLayers;
var blackMarble = layers.addImageryProvider(new Cesium.createTileMapServiceImageryProvider({
    url : '//cesiumjs.org/tilesets/imagery/blackmarble',
    maximumLevel : 8,
    credit : 'Black Marble imagery courtesy NASA Earth Observatory'
}));
//調整影像圖層透明度、亮度
blackMarble.alpha = 0.5; // 0.0 is transparent.  1.0 is opaque.
blackMarble.brightness = 2.0; // > 1.0 increases brightness.  < 1.0 decreases.

示例 - 添加單個圖片(給定角點坐標)

layers.addImageryProvider(new Cesium.SingleTileImageryProvider({
    url : '../images/Cesium_Logo_overlay.png',
    rectangle : Cesium.Rectangle.fromDegrees(-75.0, 28.0, -67.0, 29.75)
}));

完整代碼

var viewer = new Cesium.Viewer('cesiumContainer', {
    imageryProvider : new Cesium.ArcGisMapServerImageryProvider({
        url : '//services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
    }),
    baseLayerPicker : false
});

var layers = viewer.scene.imageryLayers;
var blackMarble = layers.addImageryProvider(new Cesium.createTileMapServiceImageryProvider({
    url : '//cesiumjs.org/tilesets/imagery/blackmarble',
    maximumLevel : 8,
    credit : 'Black Marble imagery courtesy NASA Earth Observatory'
}));

blackMarble.alpha = 0.5; // 0.0 is transparent.  1.0 is opaque.

blackMarble.brightness = 2.0; // > 1.0 increases brightness.  < 1.0 decreases.

layers.addImageryProvider(new Cesium.SingleTileImageryProvider({
    url : '../images/Cesium_Logo_overlay.png',
    rectangle : Cesium.Rectangle.fromDegrees(-75.0, 28.0, -67.0, 29.75)
}));

添加地形圖層

配置場景

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蒂教,一起剝皮案震驚了整個濱河市巍举,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凝垛,老刑警劉巖懊悯,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梦皮,居然都是意外死亡炭分,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門届氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欠窒,“玉大人,你說我怎么就攤上這事退子♂” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵寂祥,是天一觀的道長荐虐。 經(jīng)常有香客問我,道長丸凭,這世上最難降的妖魔是什么福扬? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任腕铸,我火速辦了婚禮,結果婚禮上铛碑,老公的妹妹穿的比我還像新娘狠裹。我一直安慰自己,他們只是感情好汽烦,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布涛菠。 她就那樣靜靜地躺著,像睡著了一般撇吞。 火紅的嫁衣襯著肌膚如雪俗冻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天牍颈,我揣著相機與錄音迄薄,去河邊找鬼。 笑死煮岁,一個胖子當著我的面吹牛讥蔽,可吹牛的內容都是我干的。 我是一名探鬼主播人乓,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼勤篮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了色罚?” 一聲冷哼從身側響起碰缔,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戳护,沒想到半個月后金抡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡腌且,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年梗肝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺董。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡巫击,死狀恐怖,靈堂內的尸體忽然破棺而出精续,到底是詐尸還是另有隱情坝锰,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布重付,位于F島的核電站顷级,受9級特大地震影響,放射性物質發(fā)生泄漏确垫。R本人自食惡果不足惜弓颈,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一帽芽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翔冀,春花似錦导街、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至计福,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徽职,已是汗流浹背象颖。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姆钉,地道東北人说订。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像潮瓶,于是被迫代替她去往敵國和親陶冷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容