1. 程式人生 > 實用技巧 >Cesium深入淺出之外掛封裝

Cesium深入淺出之外掛封裝

引子

一年多了,吭哧吭哧寫了很多Cesium的程式碼,也做了不少Cesium外掛,不過都是按照自定的格式封裝的,突然想到Cesium也是有自己的外掛格式的吧,我隱約記得有個叫mixin的東西,而且cesium-navigation外掛好像就是用它來封裝的。於是乎,翻閱API,檢視Cesium原始碼,確認無誤,那就開整吧。

預期效果

按理說這篇屬於原理性的文章可以不用上效果,但是無圖不歡嘛,來看圖,做了一個簡易的地圖選項外掛demo。

實現原理

原理就是上面提到的mixin,中文是混入的意思,也就是說要把外掛混入到Cesium中,這個是Cesium的外掛規範,凡是按照這個規範封裝的外掛都可以使用viewer.extend()方法來實現對viewer的擴充套件,不僅用起來方便了,而且使你的程式碼結構更規範了。不過mixin也就僅僅是規範而已了,檢視Cesium自帶的CesiumInspector外掛原始碼我們就會看到,viewerCesiumInspectorMixin中只有寥寥44行程式碼,而且有一半還是註釋,裡面就定義了一個mixin的方法體,viewer做為引數傳入,然後呼叫了CesiumInspector,這個東西才是真正的外掛功能實現。也就是說mixin只不過是在我們原來的外掛實現基礎之上再加一層封裝,如果單論這層包裝紙實在沒什麼講的,因此我們還要探究一下外掛的具體實現,那麼不得不提一下knockout了,利用它可以輕鬆實現html元素與ViewModel的關聯,簡單點來說knockout就是實現資料繫結的。

具體實現

雖說是講原理,但我覺得還是以具體例子結合著原理講解才效果最好,我們的預期效果中給的是地圖選項外掛的例子,那麼我們就來講它的具體實現。

建立外掛檔案

建立外掛目錄及指令碼,通常我們會將外掛放到src/widgets目錄下,併為每個外掛建立獨立的目錄,這樣做能充分體現外掛的獨立性特徵,而且便於管理。本例的目錄結構如下: