
在地理信息可视化领域,Cesium 的 3D 地球渲染能力与 Vue3 的组件化、响应式优势结合,能快速开发轻量化地理应用。本文聚焦核心流程,帮助开发者快速上手两者结合的关键操作。

Cesium 是开源地理可视化库,支持:
\# 初始化项目
npm create vite@latest vue3-cesium-demo -- --template vue
cd vue3-cesium-demo
npm install\# 安装核心依赖
npm install cesium解决 Cesium 资源路径与全局变量问题:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
  plugins: \[vue()],
  resolve: {
  // 配置别名
  alias: {
  '@': path.resolve(\_\_dirname, 'src'),
  'cesium': path.resolve(\_\_dirname, 'node\_modules/cesium/Build/Cesium')
  }
  },
  server: {
  // 允许跨域加载地图资源
  proxy: {
  '/cesium': {
  target: 'http://localhost:5173',
  changeOrigin: true
  }
  }
  },
  define: {
  // 暴露Cesium全局变量
  CESIUM\_BASE\_URL: JSON.stringify('/cesium')
  }
})在src/components/CesiumMap.vue中实现:
\<template>
  \<!-- 地图容器:必须设置宽高 -->
  \<div ref="cesiumContainer" class="cesium-container">\</div>
\</template>
\<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
// 引入Cesium核心模块
import \* as Cesium from 'cesium'
// 引入Cesium样式
import 'cesium/Widgets/widgets.css'
const cesiumContainer = ref(null)
let viewer = null // 地图实例
// 组件挂载时初始化地图
onMounted(() => {
  // 初始化Viewer
  viewer = new Cesium.Viewer(cesiumContainer.value, {
  // 简化配置:关闭不必要控件
  timeline: false, // 关闭时间轴
  animation: false, // 关闭动画控件
  baseLayerPicker: true, // 保留底图切换
  imageryProvider: new Cesium.UrlTemplateImageryProvider({
  url: 'https://webst02.is.autonavi.com/appmaptile?style=6\&x={x}\&y={y}\&z={z}' // 高德影像底图
  })
  })
  // 定位到中国区域
  viewer.camera.flyTo({
  destination: Cesium.Cartesian3.fromDegrees(104.1, 30.6, 15000000)
  })
})
// 组件卸载时销毁地图(避免内存泄漏)
onUnmounted(() => {
  if (viewer) {
  viewer.destroy()
  viewer = null
  }
})
\</script>
\<style scoped>
.cesium-container {
  width: 100vw;
  height: 100vh;
}
\</style>在onMounted中添加代码:
// 加载glTF模型(示例:加载一个建筑物模型)
const modelEntity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(116.404, 39.915, 100), // 北京坐标
  model: {
  uri: '/models/building.glb', // 模型路径(需放在public文件夹)
  scale: 100, // 缩放比例
  minimumPixelSize: 128 // 最小像素大小
  }
})
// 视角聚焦到模型
viewer.trackedEntity = modelEntity// 加载GeoJSON区域数据(示例:加载中国省级边界)
viewer.dataSources.add(Cesium.GeoJsonDataSource.load('/data/china-provinces.geojson', {
  stroke: Cesium.Color.RED, // 边界线颜色
  fill: Cesium.Color.PINK.withAlpha(0.2), // 填充色(透明)
  strokeWidth: 2 // 边界线宽度
})).then(dataSource => {
  viewer.flyTo(dataSource) // 聚焦到数据区域
})v-if控制,避免初始加载耗时
onUnmounted中必须调用viewer.destroy(),避免内存泄漏
问题现象 | 解决方案 |
|---|---|
地图容器空白 | 1. 确认容器宽高已设置;2. 检查CESIUM_BASE_URL配置是否正确 |
模型 / 数据加载失败 | 1. 路径是否放在public文件夹;2. 跨域问题需配置服务端 CORS |
本文精简了 Vue3 与 Cesium 结合的核心流程:从 3 步环境搭建,到基础地图组件封装,再到核心数据加载与优化。如需扩展高级功能(如时间轴、自定义图表),可基于本文基础,参考 Cesium 官方文档逐步补充。