如何基于openlayers和cesium實現(xiàn)二、三維地圖切換,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
公司主營業(yè)務(wù):網(wǎng)站制作、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出開魯免費做網(wǎng)站回饋大家。
這里介紹如何在普通2d的gis項目里實現(xiàn)地圖的二、三維切換。二維地圖引擎市面上比較多,比較有代表性的像openlayers、leaflet等。三維地圖目前比較流行的開源方案有cesium,它本身是基于webGL實現(xiàn)的地圖引擎。
好了,我來捋捋場景,搞清楚需求:
1、openlayers加載地圖
2、cesium加載三維地圖
3、實現(xiàn)二、三維地圖切換
4、在vue框架上實現(xiàn)以上功能
此處略過,雖然簡單,但是對于沒有接觸過gis的前端同學(xué)還是有入門門檻的。那既然是要實現(xiàn)以上需求,應(yīng)該就是要做gis項目的人。既然是做gis項目的,那這個ol加載地圖就不應(yīng)該是難點,官網(wǎng)有很多示例,所以此處略過。
還是給一個示例代碼:
cesium加載三維地圖對于gis行業(yè)的同學(xué)來說也是個麻煩事,更別說要在vue框架上實現(xiàn)了。
以vuecli3為例,引用cesium其實只用幾步:
// npm
npm install --save-dev vue-cli-plugin-cesium
// yarn
yarn add vue-cli-plugin-cesium
安裝好了就可以直接new出來用,因為它已經(jīng)綁定了vue實例;
這是一個用于實現(xiàn)openlayers與cesium切換的插件,詳細(xì)文檔移步官網(wǎng)
npm i --save olcs
import OLCesium from 'olcs/OLCesium.js';
const ol3d = new OLCesium({map: ol2dMap}); // ol2dMap 是openlayers綁定的地圖對象
ol3d.setEnabled(true);
需要注意的就是上面代碼中的ol2dMap是openlayers綁定的地圖對象,這個業(yè)內(nèi)同學(xué)都懂。結(jié)合前面的ol示例,就是那個olmap對象。
如果有這樣的需求:本來是二維地圖有個矢量地圖,比如一個什么專題圖;然后切換到了三維地圖,我仍然要能在三維地圖上看到那個專題圖。
現(xiàn)在切換到三維后,效果是有了,平面變?nèi)S地球,問題是之前的那個專題圖也看不見了!原因就是切換到三維后,二維地圖被覆蓋了。解決辦法就是,切換到三維后,再用cesium引擎加載平面專題圖;
var ol3dLayers = ol3d.getCesiumScene().imageryLayers;
// eslint-disable-next-line no-undef
ol3dLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
url: 'http://**************/arcgis/rest/services/**/******/MapServer'
}))
上面的示例地圖是一個aricgis動態(tài)服務(wù);
最后上圖,來看下效果:
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。