阅读 587

vue3+ol+cesium实现二三维系统(一)

(一)vue3+ol-cesium库实现二三维底图数据切换

实验目的

使用vue3.0,vue-cli4.x版本,实现二三维底图数据切换,平移,旋转,二维和三维要保持同步

实验版本

ol6.9、cesium1.87、vue3.0、olcs2.13

踩坑

坑:二维是加载出来了,但是三维那个地球一直加载不出来,网络如下图所示,这些加载的瓦片一看就知道有问题了,全是0,正常来说应该是不同的瓦片的,因此可以得出结论,代码是没问题的,数据也有加载,那么可能是使用Vue3的问题。

813429e0d8469d747eec44c403109280.png

解决: 再三确认下,代码是没有问题的,因此我认为是Vue3的问题,因此我用Vue2+vue-cli3的版本又做了一版本,是可以加载出来的;因此我又去检查了一次代码,发现是我在加载二维底图的时候,用了Vue3中ref来定位dom元素(因为Vue2是用ref来定位的),Vue3也可以用ref来定位,但是Vue3中的ref和vue2差别很大,Vue3中写ref也是表明我要对这个dom元素进行数据监听(并且Vue3中数据代理是用Proxy进行数据代理,这个数据代理是有深度监听的作用的)因此,在数据加载的时候,由于发生了数据监听,导致在进行瓦片数据赋值加载的时候,每一次加载都会进行一次数据监听并重新加载,因此这个三维地球加载瓦片就会有问题

代码

<template>
  <Header @changeThree="set3dEnable"></Header>
  <section class="mainBox">
    <div class="map" id="map">
    </div>
  </section>
</template>

<script>
import {onMounted} from 'vue'
import 'ol/ol.css';
import Header from '../components/views/Header'
import { Map, View } from "ol";
import TileLayer from "ol/layer/Tile";
import { transform } from "ol/proj";
import OSM from "ol/source/OSM";
import OLCesium from 'olcs/OLCesium.js';
//--引入cesium
  import 'cesium/Widgets/widgets.css'
  // import Cesium from 'cesium/Cesium'
  let Cesium = require('cesium/Cesium')
  window.Cesium = Cesium
export default {
  components:{
      Header
    },
    setup(){
      let ol2dmap = ''
      let ol3dmap = ''
      function initMap(){
        ol2dmap = new Map({
          target:'map',
          layers:[
            new TileLayer({
              source:new OSM()
            })
          ],
          view:new View({
            center:transform([25,20],"EPSG:4326","EPSG:3857"),
            zoom:5
          })
        })
        ol3dmap = new OLCesium({map:ol2dmap})
        // const scene = ol3dmap.getCesiumScene()
        // scene.terrainProvider = Cesium.createWorldTerrain()
        ol3dmap.setEnabled(true)
      }
      function set3dEnable(){
        ol3dmap.setEnabled(!ol3dmap.getEnabled())
      }
      onMounted(() => {
      Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0YTM0OTc2MC00MDA3LTRjOWYtODljMC1hYTA5MjY3MDhjMTUiLCJpZCI6NzMwOTcsImlhdCI6MTYzNjU5NTEwNX0.PLvDbCcuev2T7Mp17T_aVvvrHAL5pmTFFalqaKheP_A'    
      initMap()
    })
    return{
      set3dEnable
    }
    },
    
};
</script>

<style scoped>
.mainBox{
  width: 100%;
  position: absolute;
  top:60px;
  bottom: 0;
}
.mainBox .map{
    height: 100%;
  }
</style>


作者:憨叔叔的GIS之路
链接:https://juejin.cn/post/7032568584492875807

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐