范例中所有范例可以在Github中搜索:ExamplesforCesium
Cesium ['siːzɪəm]是一款開源的JavaScript開源庫,開發者通過Cesium,實現無插件的創建三維球和二維地圖。Cesium通過WebGL技術實現圖形的硬件加速,並且跨平台,跨瀏覽器,並提供動態數據的可視化展現。
Cesium本意是化學元素銫,其是定義秒的最精確標准,普遍地用於制作精細的原子鍾,而Cesium項目專注於動態可視化方面,這也是其取名為Cesium的內在涵義。
准備工作
- 瀏覽器
確保你的瀏覽器支持WebGL,推薦Chrome
如果無法確定你的瀏覽器是否支持,可以訪問webglreport網站獲取詳情 - Tomcat
在本系列中,使用tomcat,且默認讀者了解如何通過tomcat發布服務 - 開發環境
如果沒有特殊喜好,如果自己的開發機器不是特別差,推薦使用WebStorm。該IDE是收費的,不過,你懂的 - Cesium產品包
本文中,使用的是Cesium-1.25。通過官網可以方便獲取
產品包清單
- Apps
Cesium詳細的范例程序,建議都自己仿照着敲一遍,會有不少收獲 - Build
Release包,打包后的腳本以及CSS,Workers等,以及文檔 - Source
源碼 - Specs
Cesium的自動化單元測試,采用Jasmine框架 ,這個也是非常好用的,可以實現自動化測試框架以及接口覆蓋率等統計效果,會面會有一個具體章節來介紹 - 其他
gulpfile.js:打包腳本,后續會有專門介紹
Hello,World
看到index.html,相信你已經忍不住的雙擊了。很遺憾,WebGL出於安全性的考慮,不允許以本地file的方式打開,因此,你需要將Cesium文件夾放到tomcat中webapps下發布,以localhost的方式發布。(如果你不了解如何在tomcat中發布網站,不用擔心,這個過程非常簡單,Google一下,相信會有很多相關博文可供參考。)
下面,我們試着完成一個頁面,創建一個Cesium三維球。
首先,新建examples文件夾,並在examples文件夾中新建文件hello.html,實現我們第一個范例。
接着,在hello.html中粘貼如下代碼:
該代碼內容如下:1引入Cesium.js腳本和對應的css文件,我們就完成了相關腳本的加載工作;2同時創建id= cesiumContainer的div,並且創建Cesium.Viewer窗口,且該窗口對應剛才創建的div。運行該html文件,我們很輕松的創建了第一個WebGL Globe,效果如下:
Hello World2
如上,我們輕松愉快的體驗了一把Cesium,但這只是萬里長征的一小步。萬事開頭難,所以這個頭一定要做好。
上面的hello.html本身沒有什么問題,但對於開發人員,或多或少都需要以源碼方式加載,便於調試和問題的定位,但如上的范例直接加載Build下的Release腳本,對開發人員來說略顯不足,下面我們就升級一下這個范例。
Cesium采用Require.js的框架,用興趣的同學可以在網上了解一下Require.js的基本概念。我們下載require.min.js腳本,保存在Cesium/examples/js/文件夾中,統一管理腳本。並在examples文件夾中,新建hello2.html.
在hello2.html中,代碼如下:
和hello.html的代碼相似,但我們並沒有直接引用Build下的Cesium.js腳本,而是引用了require.js腳本:
<script src="./js/require.min.js" data-main="./js/main"></script>
data-main屬性可以在require腳本加載結束后,指定加載的第一個文件,這里是main.js(保存在Cesium/examples/js/下)。
main.js中代碼如下:
在該腳本中,變量developMode來記錄是否以Release或源碼方式來加載腳本,並根據該變量值來設置對應的文件路徑。最后,調用onload函數,結束main.js腳本的使命。
Onload函數?這個函數在哪里定義的?細心的用戶不難發現,該函數的實現是在hello2.html中,在該函數中,用戶創建div,並創建Cesium.Viewer窗口綁定該div,實現三維球的加載,其邏輯和hello.html完全一樣,只是封裝在了onload函數內。
這樣,我們基本上完成了一個完整的范例,可以設置developMode的值,選擇是否需要加載源碼進行調試。