vite vue3 使用 cesium 创建地图

1. 安装插件

npm i cesium vite-plugin-cesium

2. 配置 vite.config 文件

import cesium from "vite-plugin-cesium";

// plugins 添加 cesium
plugins: [
    vue(),
    cesium(),
]

3. vue 文件使用 cesium

<template>
  <div id="CesiumContainer" class="CesiumContainer" ref="cesium"></div>
</template>

<script setup lang="ts">
import { ref, onMounted, onUnmounted } from "vue";
import * as Cesium from "cesium";

const cesium = ref(null);
const viewer = ref<Cesium.Viewer | null>(null);


/**
 * 初始化Cesium地图并设置暗色主题
 * 定位到指定经纬度位置
 */
onMounted(() => {
  // 配置Cesium Token(如果需要)
  // Cesium.Ion.defaultAccessToken = 'your-token-here';

  // 初始化Cesium查看器
  viewer.value = new Cesium.Viewer(cesium.value as unknown as HTMLElement, {
    // 设置暗色主题
    baseLayerPicker: false, // 禁用默认的图层选择器
    animation: false, // 禁用动画控件
    timeline: false, // 禁用时间线控件
    fullscreenButton: false, // 禁用全屏按钮
    infoBox: false, // 禁用信息框
    navigationHelpButton: false, // 禁用导航帮助按钮
    homeButton: false, // 禁用home按钮
    sceneModePicker: false, // 禁用场景模式选择器
    selectionIndicator: false, // 禁用选择指示器
    geocoder: false, // 禁用地理编码器
    // 使用暗色地图
    // imageryProvider: new Cesium.TileMapServiceImageryProvider({
    //   url: Cesium.buildModuleUrl('Assets/Textures/NightLights')
    // }),
    skyBox: false, // 禁用天空盒
    skyAtmosphere: false, // 禁用大气层
    contextOptions: {
      webgl: {
        alpha: true,
      },
    },
  });

  // 设置地球为暗色
  viewer.value.scene.globe.baseColor = new Cesium.Color(0.0, 0.0, 0.0, 1.0);
  viewer.value.scene.backgroundColor = new Cesium.Color(0.0, 0.0, 0.0, 1.0);

  // 禁用地形光照
  viewer.value.scene.globe.enableLighting = false;

  // 注释掉原来的定位代码,因为我们将使用flyToLineStringMiddle函数
  const targetPosition = Cesium.Cartesian3.fromDegrees(
    118.725305, // 经度
    31.684129,  // 纬度
    50000        // 高度(米)
  );

  // 设置相机位置
  viewer.value.camera.flyTo({
    destination: targetPosition,
    orientation: {
      heading: Cesium.Math.toRadians(0), // 朝向角度
      pitch: Cesium.Math.toRadians(-60), // 俯仰角度
      roll: 0
    },
    duration: 2 // 飞行时间(秒)
  });

  // // 添加一个标记点(可选)
  // viewer.value.entities.add({
  //   position: Cesium.Cartesian3.fromDegrees(118.725305, 31.684129),
  //   point: {
  //     pixelSize: 10,
  //     color: Cesium.Color.CYAN
  //   }
  // });
});

/**
 * 组件卸载时销毁Cesium实例,释放资源
 */
onUnmounted(() => {
  if (viewer.value) {
    viewer.value.destroy();
    viewer.value = null;
  }
});
</script>

<style scoped lang="scss">
.CesiumContainer {
  width: 100%;
  height: 100%;
  padding: 0;
  margin: 0;
}
</style>

四下皆无人