溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何基于openlayers和cesium實現(xiàn)二、三維地圖切換

發(fā)布時間:2021-11-15 16:53:14 來源:億速云 閱讀:753 作者:柒染 欄目:大數(shù)據(jù)

如何基于openlayers和cesium實現(xiàn)二、三維地圖切換,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

這里介紹如何在普通2d的gis項目里實現(xiàn)地圖的二、三維切換。二維地圖引擎市面上比較多,比較有代表性的像openlayers、leaflet等。三維地圖目前比較流行的開源方案有cesium,它本身是基于webGL實現(xiàn)的地圖引擎。 

場景需求

好了,我來捋捋場景,搞清楚需求:

1、openlayers加載地圖

2、cesium加載三維地圖

3、實現(xiàn)二、三維地圖切換

4、在vue框架上實現(xiàn)以上功能

 

實現(xiàn)步驟

 
一、用openlayers加載地圖

此處略過,雖然簡單,但是對于沒有接觸過gis的前端同學(xué)還是有入門門檻的。那既然是要實現(xiàn)以上需求,應(yīng)該就是要做gis項目的人。既然是做gis項目的,那這個ol加載地圖就不應(yīng)該是難點,官網(wǎng)有很多示例,所以此處略過。

還是給一個示例代碼:

<template>
<div id = "map">
       
   </div>
</template>
<script>
import 'ol/ol.css';
import Map from 'ol/Map';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/layer/Tile';
import View from 'ol/View';

var olmap = new Map({
 layers: [
   new TileLayer({
     source: new OSM(),
   }) ],
 target: 'map',
 view: new View({
   center: [0, 0],
   zoom: 2,
 }),
});
</script>
   
二、用cesium加載三維地圖

cesium加載三維地圖對于gis行業(yè)的同學(xué)來說也是個麻煩事,更別說要在vue框架上實現(xiàn)了。

以vuecli3為例,引用cesium其實只用幾步:

 
安裝vue-cli-plugin-cesium插件
// npm
npm install --save-dev vue-cli-plugin-cesium

// yarn
yarn add vue-cli-plugin-cesium
   
直接在vue組件中使用

安裝好了就可以直接new出來用,因為它已經(jīng)綁定了vue實例;

<template>
<div id= "cesiumContainer">
   </div>
</template>
<script>
export default {
     name: "",
     mounted(){
        var viewer = new Cesium.Viewer("cesiumContainer")
     }
   }
</script>
   
三、實現(xiàn)二、三維地圖切換
 
安裝olcs插件

這是一個用于實現(xiàn)openlayers與cesium切換的插件,詳細文檔移步官網(wǎng)

npm i --save olcs
   
實現(xiàn)二、三維切換
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引擎加載平面專題圖;

 
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ù);

最后上圖,來看下效果:

如何基于openlayers和cesium實現(xiàn)二、三維地圖切換


看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI