源码:cesium-demo: Cesium示例工程,基于vue3
1、vite-plugin-cesium 是一个专门为 Vite 构建工具定制的插件,用于在 Vite 项目中轻松使用 Cesium 库。它简化了在 Vite 项目中集成 Cesium 的过程。
npm i cesium vite-plugin-cesium vite -D
2、配置vite.config.js
- import cesium from 'vite-plugin-cesium'
-
- export default defineConfig({
- plugins: [
- cesium()
- ]
- })
3、页面
- <template>
- <div id="cesiumContainer"></div>
- </template>
-
- <script setup>
- import * as Cesium from 'cesium';
- import {onMounted, ref} from 'vue';
-
- const viewer = ref();
-
- onMounted(() => {
- //初始化地球
- initCesium()
- })
-
- //初始化地球
- const initCesium = () => {
- Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZmJjODE1Yy1kMjU4LTQyZTgtODAyZC1mNzE2MDNhMmQ3YzUiLCJpZCI6MTk5NzQwLCJpYXQiOjE3MDk2Mjg5Mjh9.GuRbyEbm8FknaFOM34kGm9wCbf2XVjp873h_QD-Vs7A"
- //默认定位到中国上空
- Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
- 75.0, // 东
- 0.0, // 南
- 140.0, // 西
- 60.0 // 北
- );
- viewer.value = new Cesium.Viewer('cesiumContainer', {
- infoBox: false, // 禁用沙箱,解决控制台报错
- // 是否显示图层选择器
- baseLayerPicker: false,
- // 是否显示全屏按钮
- fullscreenButton: true,
- // 是否显示右上角的查询按钮
- geocoder: false,
- // 是否显示HOME按钮
- homeButton: true,
- // 是否显示场景控制按钮
- sceneModePicker: false,
- // 是否显示帮助按钮
- navigationHelpButton: false,
- // 是否显示选择框
- selectionIndicator: false,
- //粒子效果
- shouldAnimate: true,
- });
-
-
- // //离线地图
- // viewer.value.imageryLayers.addImageryProvider(
- // new Cesium.UrlTemplateImageryProvider({ url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg", })
- // );
- //
- // //在线地图,Bing Maps Labels
- // viewer.value.imageryLayers.addImageryProvider(
- // await Cesium.IonImageryProvider.fromAssetId(2411391),
- // );
-
-
- // 隐藏cesiumLogo
- viewer.value.cesiumWidget.creditContainer.style.display = "none";
-
- //场景亮度
- viewer.value.scene.light = new Cesium.DirectionalLight({
- direction: new Cesium.Cartesian3(1, -1, -1),
- color: Cesium.Color.WHITE,
- intensity: 4
- });
-
- }
- </script>
-
- <style scoped>
- html, body, #cesiumContainer {
- width: 100%;
- height: 100%;
- padding: 0;
- margin: 0;
- overflow: hidden;
- }
- </style>
4、启动项目,访问

如果项目可以访问外网,也可以直接配置在线地图 bing map就搞定了,可以忽略后续步骤
- //Bing Maps Labels
- viewer.value.imageryLayers.addImageryProvider(
- await Cesium.IonImageryProvider.fromAssetId(2411391),
- );
5、如果项目只能访问内网,则需要配置离线地图
- //离线地图
- viewer.value.imageryLayers.addImageryProvider(
- //本机
- new Cesium.UrlTemplateImageryProvider({url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg",})
- );
url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg" 对应的就是离线的地图
一般不会直接放进项目里,使用nginx代理这些图片即可
6、离线地图nginx配置,cat nginx/cesium.conf
- server {
- listen 80;
- #server_name your_domain.com; # 替换为你的域名或IP地址
-
- # 允许跨域请求
- location /cesium {
- # 设置CORS头部
- add_header 'Access-Control-Allow-Origin' '*'; # 或者特定来源如 'http://example.com'
- add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
- add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
-
- # 如果请求方法为OPTIONS,则返回204状态码
- if ($request_method = 'OPTIONS') {
- return 204;
- }
-
- # 代理到/opt/docker-data/cesium目录
- alias /opt/docker-data/cesium;
- try_files $uri $uri/ =404;
-
- # 其他可能的设置...
- }
-
- # 其他可能的配置...
-
- # 错误处理
- error_page 404 /404.html;
-
- # 其他配置...
- }
7、离线地图文件:文件太大了,想要的留言吧
颜色变绿了,查看网络请求,已经加载nginx的代理的图层了

OK,大功搞定!!