Cesium引入vite + vue3

本文介绍了如何在Vue项目中使用cesium-vite插件,包括安装、配置Vite服务器,以及如何加载高德地图和ArcGISMap地图。详细讲解了如何在`vite.config.js`中集成Cesium并管理地图加载设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载cesium-vite 插件 最新版本

npm i cesium vite-plugin-cesium vite -D    //最新版 109版本
npm i cesium@1.99 vite-plugin-cesium    //指定版本
# yarn add cesium vite-plugin-cesium vite -D
# yarn add cesium@1.99 vite-plugin-cesium 

卸载命令

npm uninstall cesium vite-plugin-cesium 
# yarn remove cesium vite-plugin-cesium 

使用 vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import WindiCSS from 'vite-plugin-windicss'
import cesium from 'vite-plugin-cesium'; //引入插件

import path from 'path'

export default defineConfig({
  resolve:{
      alias:{ //别名
        "~" : path.resolve(__dirname,"src") //用特殊符号指定路劲 src目录下    
      }
  },
  server:{
    host:'127.0.0.1',
    port:8081,
   // https:false, //最新版没有配置 SSL证书 无法启动
    https: {
      key: './127.0.0.1-key.pem', // 密钥文件路径
      cert: './127.0.0.1.crt' // 证书文件路径
    },
    open:true,//是否自动启动到浏览器当中
    proxy:{
      '/api': {
        target: 'https://maic.casetekcorp.com:7003',  
        // 这里新增一个配置
        //secure: false,  //最新版本的 Vite 中,server 配置中没有 secure 选项。
        // 新增结束
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      },
    }
  },
  plugins: [
    vue(),
    WindiCSS(),
    cesium()
  ]
})


组件使用 加载高德地图 高德地图的加载方便很多,并不需要申请key,可以直接加载到我们的Cesium中。

<template>
        <div  id="cesiumContainer"  style=" width:100%;height: 80vh;" />
</template>
<script setup>
import * as Cesium from "cesium";
import { onMounted } from "vue";
onMounted(() => {
   //key 替换成自己的密钥
    Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjQ1NjY0Ni02Y2VhLTQ1MDgtODFkOS0wNDY4YThlNTc0NjIiLCJpZCI6ODI0MzAsImlhdCI6MTY5MzU1MTcwN30.MZrWEhQD1n6MuEmvPIa89hbjBRzgp2kLDDbtH1KnSmU';
   
    var viewer = new Cesium.Viewer('cesiumContainer', {
                
                terrain: Cesium.Terrain.fromWorldTerrain({
                  requestWaterMask: true,
                  requestVertexNormals: true,
                }),
                animation: false,  //动画控制不显示
                timeline: false,    //时间线不显示
                fullscreenButton: false, //全屏按钮不显示
                infoBox: false,
                geocoder:false, //右上角 搜索
                homeButton:false, //右上角 Home
                sceneModePicker:false, //右上角 2D/3D切换
                baseLayerPicker:false,  //右上角 地形
                navigationHelpButton:false, //右上角 Help
        
        });  
        
        
        //高德地图的加载方便很多,并不需要申请key,可以直接加载到我们的Cesium中。
        viewer._cesiumWidget._creditContainer.style.display = "none";
        //1.Cesium加载高德矢量地图
        var layer = new Cesium.UrlTemplateImageryProvider({
            url: "https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
            minimumLevel: 4,
            maximumLevel: 18
        })
        viewer.imageryLayers.addImageryProvider(layer);
        
        //2.Cesium加载高德影像
        var imgLayer = new Cesium.UrlTemplateImageryProvider({
            url: "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
            minimumLevel: 3,
            maximumLevel: 18
        })
        viewer.imageryLayers.addImageryProvider(imgLayer);
        
        //3.Cesium加载注记要素
        var annLayer = new Cesium.UrlTemplateImageryProvider({
            url: "https://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
            minimumLevel: 3,
            maximumLevel: 18
        })
        viewer.imageryLayers.addImageryProvider(annLayer);

    // 隐藏logo
    viewer.cesiumWidget.creditContainer.style.display = "none";
})
</script>


在这里插入图片描述

加载ArcGISMap地图

<template>
        <div  id="cesiumContainer"  style=" width:100%;height: 80vh;" />
</template>
<script setup>
import * as Cesium from "cesium";
import { onMounted } from "vue";
onMounted(async() => {
   //key 替换成自己的密钥
    Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZjQ1NjY0Ni02Y2VhLTQ1MDgtODFkOS0wNDY4YThlNTc0NjIiLCJpZCI6ODI0MzAsImlhdCI6MTY5MzU1MTcwN30.MZrWEhQD1n6MuEmvPIa89hbjBRzgp2kLDDbtH1KnSmU';
   
    var viewer = new Cesium.Viewer('cesiumContainer', {
                
                terrain: Cesium.Terrain.fromWorldTerrain({
                  requestWaterMask: true,
                  requestVertexNormals: true,
                }),
                animation: false,  //动画控制不显示
                timeline: false,    //时间线不显示
                fullscreenButton: false, //全屏按钮不显示
                infoBox: false,
                geocoder:false, //右上角 搜索
                homeButton:false, //右上角 Home
                sceneModePicker:false, //右上角 2D/3D切换
                baseLayerPicker:false,  //右上角 地形
                navigationHelpButton:false, //右上角 Help
        
        });  
        const imageLayers = viewer.imageryLayers 
 
        imageLayers.remove(imageLayers.get(0)) //清楚Cesium默认加载的影像地图数据(默认是加载的bing地图)

            const esri = await Cesium.ArcGisMapServerImageryProvider.fromUrl(   
                'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer',
            )
            imageLayers.addImageryProvider(esri) 


    // 隐藏logo
    viewer.cesiumWidget.creditContainer.style.display = "none";
})
</script>

在这里插入图片描述

<think>好的,我现在需要帮助用户在ViteVue3项目中集成Cesium和jQuery。首先,我得回忆一下相关的步骤和可能遇到的问题,同时结合用户提供的引用内容,特别是引用[2]提到的Vue的数据驱动特性,避免直接操作DOM,但用户又需要使用jQuery,这可能会有冲突。 首先,关于Cesium的集成。Cesium是一个WebGL地理可视化库,通常需要全局引入其CSS和JS文件,并且在构建工具中处理资源。Vite项目可能需要配置插件,比如vite-plugin-cesium,来简化这个过程。需要安装Cesium的npm包,然后通过插件处理资源路径和拷贝必要的静态文件。同时,在Vue组件中,可能需要使用onMounted生命周期钩子来初始化Cesium Viewer,确保DOM已经挂载。 接下来是jQuery的集成。虽然Vue推荐避免直接操作DOM,但用户可能需要用jQuery处理某些第三方库或遗留代码。在Vite中安装jQuery后,需要在vite.config.js中配置全局变量,这样可以在组件中通过import $ from &#39;jquery&#39;来使用。需要注意的是,在Vue中使用jQuery时应尽量减少直接DOM操作,而是利用Vue的响应式数据,这样符合引用[2]提到的数据驱动思想,保持代码的可维护性。 然后,需要处理可能的构建问题。比如Cesium的一些模块可能需要AMD加载器,而Vite默认使用ES模块。可能需要配置优化选项,排除某些模块的转换,或者在插件中处理。另外,Cesium的体积较大,可能需要代码分割或按需加载来优化性能。 用户可能需要一个示例代码,展示如何在Vue组件中同时使用Cesium和jQuery。比如,在组件挂载后初始化Cesium Viewer,并在某个按钮点击事件中使用jQuery发送AJAX请求获取数据,然后更新Cesium的实体。同时,需要注意在组件卸载时销毁Cesium实例,避免内存泄漏。 最后,要提醒用户注意最佳实践,比如在Vue中优先使用响应式数据而非直接操作DOM,合理划分组件结构,以及优化Cesium的加载方式。可能还需要提到如何结合Vue3的Composition API来封装Cesium相关的逻辑,提高代码的可复用性。</think>### 在 Vite + Vue3 中集成 Cesium 和 jQuery 的步骤与示例 #### 1. 创建 Vite 项目并安装依赖 ```bash npm create vite@latest my-project --template vue cd my-project npm install cesium jquery @types/jquery --save ``` #### 2. 配置 Cesium 插件 安装官方推荐的 Vite 插件: ```bash npm install vite-plugin-cesium --save-dev ``` 修改 `vite.config.js`: ```javascript import { defineConfig } from &#39;vite&#39; import vue from &#39;@vitejs/plugin-vue&#39; import cesium from &#39;vite-plugin-cesium&#39; export default defineConfig({ plugins: [vue(), cesium()], optimizeDeps: { exclude: [&#39;cesium&#39;] // 避免构建错误 } }) ``` #### 3. 配置 jQuery 全局注入 修改 `vite.config.js` 添加: ```javascript export default defineConfig({ // ...其他配置 resolve: { alias: { &#39;jquery&#39;: &#39;jquery/dist/jquery.slim.min.js&#39; } } }) ``` #### 4. Vue3 组件示例 ```vue <template> <div id="cesium-container" ref="cesiumContainer"></div> <button @click="loadData">加载数据</button> </template> <script setup> import { ref, onMounted, onBeforeUnmount } from &#39;vue&#39; import $ from &#39;jquery&#39; import * as Cesium from &#39;cesium&#39; const cesiumContainer = ref(null) let viewer = null onMounted(() => { // 初始化 Cesium viewer = new Cesium.Viewer(cesiumContainer.value, { baseLayer: Cesium.ImageryLayer.fromProviderAsync( Cesium.IonImageryProvider.fromAssetId(3812) ) }) }) const loadData = async () => { // 使用 jQuery 获取数据 const response = await $.ajax({ url: &#39;https://api.example.com/geojson&#39;, method: &#39;GET&#39; }) // 使用 Vue 响应式数据更新视图(符合数据驱动原则[^2]) viewer.entities.add({ polygon: { hierarchy: Cesium.PolygonHierarchy.fromPositions( Cesium.Cartesian3.fromDegreesArray(response.coordinates.flat()) ), material: Cesium.Color.RED.withAlpha(0.5) } }) } onBeforeUnmount(() => { if (viewer) { viewer.destroy() } }) </script> <style> #cesium-container { width: 100%; height: 600px; } </style> ``` #### 5. 最佳实践建议 1. **模块化封装**:将 Cesium 操作封装为自定义 hook ```javascript // useCesium.js export function useCesium(containerRef) { // 封装初始化、实体管理等逻辑 } ``` 2. **按需加载**:通过动态导入优化 Cesium 体积 ```javascript const initCesium = async () => { const Cesium = await import(&#39;cesium&#39;) // 初始化代码 } ``` 3. **响应式集成**:将 Cesium 实体与 Vue 响应式数据绑定 ```javascript const entities = reactive([]) watch(entities, (newVal) => { viewer.entities.removeAll() newVal.forEach(addEntity) }) ``` 4. **性能优化**:配置构建选项 ```javascript // vite.config.js export default defineConfig({ build: { chunkSizeWarningLimit: 1600 // 处理大文件警告 } }) ``` §§ 相关问题 §§ 1. 如何解决 CesiumVite 中的模块加载问题? 2. Vue3 中如何实现 Cesium 实体的响应式更新? 3. 使用 jQuery 与 Vue 的响应式系统如何协同工作? 4. 如何优化 CesiumVue 项目中的加载性能? [^1]: 引用来源说明框架集成时的设计模式差异 : 数据驱动思想在 GIS 可视化中的优势体现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光浅止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值