vue-cesium第三期-虚空地球的生成

前言

书接上回,为了营造一种科技感,然后呢,网上找了找案例,感觉这种还行

地址如下: 航线图

感觉还可以,给人一种虚空地球的感觉,比普通的地球看上去更厉害了些。

说实话,一开始还怪尴尬的,不知道怎么实现,一直以为是底图的原因,找了好些底图,始终没有这种效果

后来看到这种效果的

直接加载地图数据不就行了,直接试试看

主要思路

通过geojson加载地图数据,然后隐藏地球,然后实现这种空心的地球

核心代码

这个geo数据如果需要的话,可以私信我

less 复制代码
//不显示地球
viewer.value.scene.globe.show = false;

// 加载行政区域
viewer.value.dataSources.add(Cesium.GeoJsonDataSource.load(map, {
  stroke: Cesium.Color.LIGHTSTEELBLUE,
  fill: Cesium.Color.LIGHTSTEELBLUE.withAlpha(1),
  strokeWidth: 0.1,
  markerSymbol: '?',
  clampToGround: false //开启贴地
}));

全部代码

ini 复制代码
<template>
  <div class="home viewer">
    <vc-viewer
        ref="vcViewer"
        :info-box="false"
        :contextOptions="contextOption"
        @ready="onViewerReady">
      <vc-layer-imagery>
        <vc-imagery-provider-arcgis ref="layer"></vc-imagery-provider-arcgis>
      </vc-layer-imagery>
      <vc-terrain-provider-cesium ref="provider"></vc-terrain-provider-cesium>      
    </vc-viewer>
  </div>
</template>
typescript 复制代码
<script lang="ts">
import {ref, onBeforeUnmount} from 'vue'

import map from "@/assets/world.json";

export default {
  name: 'Home',
  setup() {
    const vcViewer = ref<any>(null)

    const imageryProvider = ref(null)

    // 地图影响
    const layer = ref<any>(null)

    const contextOption = {
      webgl: {
        alpha: true,
      }
    }

    let viewerUp:any = null
    // eslint-disable-next-line no-unused-vars
    let CesiumUp:any = null

    const methods =  {
      onViewerReady ({Cesium, viewer}: {Cesium: any, viewer:any}) {
        console.log('onViewerReady执行了')

        viewerUp = viewer
        CesiumUp = Cesium

        // 隐藏天空盒子,设置透明度
        viewer.scene.skyBox.show = false;
        viewer.scene.backgroundColor = new Cesium.Color(0.0, 0.0, 0.0, 0.0);

        // 隐藏logo
        viewer._cesiumWidget._creditContainer.style.display = "none";
      
        //不显示地球
        viewer.value.scene.globe.show = false;
        
        // 加载行政区域
        viewer.value.dataSources.add(Cesium.GeoJsonDataSource.load(map, {
          stroke: Cesium.Color.LIGHTSTEELBLUE,
          fill: Cesium.Color.LIGHTSTEELBLUE.withAlpha(1),
          strokeWidth: 0.1,
          markerSymbol: '?',
          clampToGround: false //开启贴地
        }));


        // 解决贴地区块显示不全
        viewer.scene.globe.depthTestAgainstTerrain = false
      },
    }

    onBeforeUnmount(() => {
      layer.value.unload()
      vcViewer.value.unload()

      setTimeout(() => {
        let gl = viewerUp.scene.context._originalGlContent
        viewerUp.destory();
        gl.getExtension('WEBGL_lose_context').loseContext()
        gl = null;
      }, 1000)
    });

    return {
      ...methods,
      vcViewer,
      layer,
      contextOption,
      imageryProvider,
    }
  },
}
</script>

结果展示

还有一些细节需要处理,只能说8成相似,不过也可以了

相关推荐
烛阴18 小时前
为什么 `Promise.then` 总比 `setTimeout(..., 0)` 快?微任务的秘密
前端·javascript·typescript
XiaoSong18 小时前
基于 React Native/Expo 项目的持续集成(CI)最佳实践配置指南
前端·react native·react.js
white-persist18 小时前
汇编代码详细解释:汇编语言如何转化为对应的C语言,怎么转化为对应的C代码?
java·c语言·前端·网络·汇编·安全·网络安全
张愚歌18 小时前
轻松打造个性化Leaflet地图标记
前端·javascript
华仔啊18 小时前
CSS实现高级流光按钮动画,这几行代码堪称神来之笔
前端·css
歪歪10018 小时前
详细介绍一下“集中同步+分布式入库”方案的具体实现步骤
开发语言·前端·分布式·后端·信息可视化
林太白18 小时前
rust17-部门管理模块
前端·后端·rust
_处女座程序员的日常18 小时前
如何预览常见格式word、excel、ppt、图片等格式的文档
前端·javascript·word·excel·开源软件
明月与玄武18 小时前
前端文件上传终极指南:从原理到架构实践!
前端·前端文件上传终极指南
布列瑟农的星空19 小时前
后台类项目如何挖掘前端技术亮点
前端·面试