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成相似,不过也可以了

相关推荐
福兮说5 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea6 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
科技观察哨6 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强7 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
今年下半年8 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理8 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
前端snow10 小时前
ai agent --- DeepAgents 中间件
前端
data analyse 45610 小时前
报表能自定义的国内统计工具有哪些
前端·数据分析