Vite项目如何配置CesiumJS

CCesium 是一个跨平台、跨浏览器的展示三维地球和地图的 javascript 库。

Cesium 使用WebGL 来进行硬件加速图形,使用时不需要任何插件支持,但是浏览器必须支持WebGL;

目标

1、vite项目配置Cesium。

2、使用Cesium实现如下简单效果。

vite项目配置Cesium

1、引入Cesium的css文件

在main.ts中导入Cesium所需要的css文件,如下所示:

这里和导入其它组件库类似,比如导入ant-design的时候,同样需要导入css文件。

2、引入Cesium的静态文件

这四个文件是在项目打包的时候,需要导入到打包后的文件。

  • node_modules/cesium/Build/Cesium/Workers
  • node_modules/cesium/Build/Cesium/ThirdParty
  • node_modules/cesium/Build/Cesium/Assets
  • node_modules/cesium/Build/Cesium/Widgets

为了实现复制文件的目的,在vite中需要使用vite-plugin-static-copy插件。

2.1 按照vite-plugin-static-copy插件

pnpm add vite-plugin-static-copy -D

2.2 在vite.config.ts里边配置

  1. Ion配置(可选)

当项目中需要使用Ion的实现,需要配置accesstoken, accesstoken可以在Cesium官网申请。

申请完accesstoken以后,可以在src/main.ts里边安装如下配置。

至此开发环境配置全部完成。

  1. 项目打包报错

开发环境下没有问题,但是在执行打包的时候,会报如下错误:Unable to determine Cesium base URL automatically。

这个问题网上很多解决办法,很多说在vite中配置define,或者在index.html里边配置window.CESIUM_BASE_URL = '/cesiumStatic',但是都无法解决该问题。

最后发现是vite的版本问题,只要把vite的版本从4升级到5就可以了。

开发

js 复制代码
<template>
  <div class="box">
    <div id="cesiumContainer"></div>
  </div>
</template>

<script setup>
import * as Cesium from "cesium";
import { onMounted } from "vue";
  const cameraPositions = [
    { lon: 116.29421699792147, lat: 40.04092779976567, height: 20},
    { lon: 116.29431669792257, lat: 40.04092879976477, height: 20},
    { lon: 116.29411609792367, lat: 40.04082979976387, height: 20}
    // 添加更多摄像头位置...
  ];
onMounted(() => {
  const viewer = new Cesium.Viewer('cesiumContainer', {
    infoBox: false,
    shouldAnimate: true,
    sceneMode: Cesium.SceneMode.SCENE3D,
    timeline: false,
    animation: false,
    fullscreenButton: false,
    geocoder: false,
    homeButton: false,
    sceneModePicker: false,
    scene3DOnly: false,
    selectionIndicator: false,
    navigationHelpButton: false,
    shadows: false,
  });

  viewer._cesiumWidget._creditContainer.style.display = "none";
  viewer.scene.fxaa = false;
  viewer.scene.postProcessStages.fxaa.enabled = true;

  if (Cesium.FeatureDetection.supportsImageRenderingPixelated()) {
    viewer.resolutionScale = window.devicePixelRatio;
  }

  viewer.scene.globe.show = true;
  // viewer.scene.screenSpaceCameraController.enableInputs = false; // 禁用鼠标控制

  // 将三维球定位到中国
    viewer.camera.setView({
      // fromDegrees()方法,将经纬度和高程转换为世界坐标
      destination: Cesium.Cartesian3.fromDegrees(116.29967988095092, 40.0401389753888, 1000.0),
      orientation: {
        heading: 6.283185307179586,
        // 视角
        pitch: -1.5686521559334161,
        roll: 0,
      }
    });
    // 将相机视角定位到指定位置
  viewer.scene.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(
      116.29421699792147,
      40.04092779976567,
      100
    ),
    orientation: {
      heading : Cesium.Math.toRadians(0),
      pitch : Cesium.Math.toRadians(-90),
      roll : 0.0
    }
  });
  // let entity = null;
  cameraPositions.forEach((position, index) => {
    const entity = viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(position.lon, position.lat, position.height),
    viewFrom: new Cesium.Cartesian3(0, 0, 0),
    point: {
      pixelSize: 10,
      color: Cesium.Color.BLUE,
    },
  });
});
  // console.log(12211,entity)
  // viewer.trackedEntity = entity;

});

</script>

<style scoped>
.box {
  width: 8rem;
  height: 8rem;
}
#cesiumContainer {
  width: 100%;
  height: 100%;
}
</style>

End;

相关推荐
程序媛小果4 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
喵叔哟24 分钟前
重构代码之取消临时字段
java·前端·重构
还是大剑师兰特1 小时前
D3的竞品有哪些,D3的优势,D3和echarts的对比
前端·javascript·echarts
王解1 小时前
【深度解析】CSS工程化全攻略(1)
前端·css
一只小白菜~1 小时前
web浏览器环境下使用window.open()打开PDF文件不是预览,而是下载文件?
前端·javascript·pdf·windowopen预览pdf
方才coding1 小时前
1小时构建Vue3知识体系之vue的生命周期函数
前端·javascript·vue.js
man20171 小时前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
阿征学IT1 小时前
vue过滤器初步使用
前端·javascript·vue.js
王哲晓1 小时前
第四十五章 Vue之Vuex模块化创建(module)
前端·javascript·vue.js
丶21361 小时前
【WEB】深入理解 CORS(跨域资源共享):原理、配置与常见问题
前端·架构·web