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;

相关推荐
zqx_714 分钟前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己31 分钟前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称1 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色1 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2341 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河2 小时前
CSS总结
前端·css
NiNg_1_2342 小时前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
读心悦2 小时前
如何在 Axios 中封装事件中心EventEmitter
javascript·http
BigYe程普2 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
神之王楠2 小时前
如何通过js加载css和html
javascript·css·html