vue3项目中引入Cesium

news2024/9/29 11:50:16

1、创建项目

本文章是我学习Cesium时记录下来的,是我用来学习使用的。
使用vite+vue3创建项目,组件库使用element plus,项目地址在我的gitee仓库中有,https://gitee.com/the-world-keeps-blooming/my-vite-vue-cesium。
在vite中有一个关于Cesium的插件:vite-plugin-cesium。下面介绍如何在项目中使用这个插件,插件的网址如下所示:https://github.com/nshen/vite-plugin-cesium,这个插件的官网中有如何使用的说明。

npm i cesium vite-plugin-cesium vite -D

安装好对应的依赖之后,找到项目的vite.config.js文件,进行大概如下的配置。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 导入Cesium插件
import cesium from 'vite-plugin-cesium';
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),cesium()]
})

然后在某一个vue文件中,进行配置。如我这里是放在了项目的src\views\cesium\cesium_hello_world\index.vue中。具体的vue代码如下所示。

<template>
    <div style="width: 100%; height: 100%;">
      <div id="cesiumContainer"></div>
    </div>
  </template>
  
  <script setup>
  import { onMounted } from 'vue';
  import * as Cesium from 'cesium';
  onMounted(() => {
    const viewer = new Cesium.Viewer('cesiumContainer');
  })
  
  </script>
  
  <style scoped>
  #cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
  }
  </style>
  

结果如下图所示,出现地球就可以了。至于UI什么的,不要介意这个,将就这个看就行了。
在这里插入图片描述

2、配置自己的token

插件中使用的关于Cesium的token是官网提供的默认token,如果想要控制访问Cesium的某些资源,我们就需要使用自己的token了。具体的token申请官网在这里https://ion.cesium.com/tokens?page=1,具体的token可以根据下面的图片中找到。
在这里插入图片描述

2.1、修改为自己token的代码

对应的vue文件

<template>
    <div style="width: 100%; height: 100%;">
        <div id="cesiumContainer"></div>
    </div>
</template>

<script setup>
import { onMounted } from 'vue';
import * as Cesium from 'cesium';
onMounted(() => {
    // 对应的Cesium的token
    let token = '你的token'
    Cesium.Ion.defaultAccessToken = token
    const viewer = new Cesium.Viewer('cesiumContainer', {
        terrain: Cesium.Terrain.fromWorldTerrain(),
    });
})

</script>

<style scoped>
#cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}
</style>

出现对应的地球就可以了,说明token配置成功了。
在这里插入图片描述

3、获得一个干净的地球

如上图所示的图片中,地球界面有很多对应的按钮,搜索框等内容。那么,我们该如何获取一个干净的地球呢?具体可以往后看。对应的vue文件的代码如下所示。

<template>
    <div style="width: 100%; height: 100%;">
        <div id="cesiumContainer"></div>
    </div>
</template>

<script setup>
import { onMounted } from 'vue';
import * as Cesium from 'cesium';
onMounted(() => {
    // 对应的Cesium的token
    let token = '你的token'
    Cesium.Ion.defaultAccessToken = token
    const viewer = new Cesium.Viewer('cesiumContainer', {
        // 搜索框
        geocoder: false,
        // home键
        homeButton: false,
        // 全屏按钮
        fullscreenButton: false,
        // 动画控件
        animation: false,
        // 场景模式选择器,就是控制二三维的那个
        sceneModePicker: false,
        // 时间轴
        timeline: false,
        // 导航帮助提示按钮
        navigationHelpButton: false,
        // 地图选择器
        baseLayerPicker: false
    });
})

</script>

<style scoped>
#cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}
/* 隐藏底部 */
:deep(.cesium-viewer-bottom) {
    display: none !important;
}

</style>

结果如下图所示:
在这里插入图片描述
从上图的结果中可以看出得到了一个纯净版的Cesium界面了。

4、加载Cesium官方提供的在线地形

具体vue的代码如下所示

<template>
    <div style="width: 100%; height: 100%;">
        <div id="cesiumContainer"></div>
    </div>
</template>

<script setup>
import { onMounted } from 'vue';
import * as Cesium from 'cesium';
onMounted(() => {
    // 对应的Cesium的token
    let token = '你的token'
    Cesium.Ion.defaultAccessToken = token
    const viewer = new Cesium.Viewer('cesiumContainer', {
        // 搜索框
        geocoder: false,
        // home键
        homeButton: false,
        // 全屏按钮
        fullscreenButton: false,
        // 动画控件
        animation: false,
        // 场景模式选择器,就是控制二三维的那个
        sceneModePicker: false,
        // 时间轴
        timeline: false,
        // 导航帮助提示按钮
        navigationHelpButton: false,
        // 地图选择器
        baseLayerPicker: false,
        // cesium 提供的官方地形
        terrain: Cesium.Terrain.fromWorldTerrain()
    });
    // 飞行到某个位置
    viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(102.90, 27.23, 5600),
        orientation: {
            heading: Cesium.Math.toRadians(0.0),
            pitch: Cesium.Math.toRadians(-15.0),
        }
    });

})

</script>

<style scoped>
#cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}

/* 隐藏底部 */
:deep(.cesium-viewer-bottom) {
    display: none !important;
}
</style>

结果如下所示,从图中可以看到有地形起伏了。
在这里插入图片描述

5、加载Cesium官方提供的在线建筑

具体vue的代码如下所示

<template>
    <div style="width: 100%; height: 100%;">
        <div id="cesiumContainer"></div>
    </div>
</template>

<script setup>
import { onMounted } from 'vue';
import * as Cesium from 'cesium';
onMounted( async () => {
    // 对应的Cesium的token
    let token = '你的token'
    Cesium.Ion.defaultAccessToken = token
    const viewer = new Cesium.Viewer('cesiumContainer', {
        // 搜索框
        geocoder: false,
        // home键
        homeButton: false,
        // 全屏按钮
        fullscreenButton: false,
        // 动画控件
        animation: false,
        // 场景模式选择器,就是控制二三维的那个
        sceneModePicker: false,
        // 时间轴
        timeline: false,
        // 导航帮助提示按钮
        navigationHelpButton: false,
        // 地图选择器
        baseLayerPicker: false,
        // cesium 提供的官方地形
        terrain: Cesium.Terrain.fromWorldTerrain()
    });
    // 飞行到某个位置
    viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(102.90, 27.23, 5600),
        orientation: {
            heading: Cesium.Math.toRadians(0.0),
            pitch: Cesium.Math.toRadians(-15.0),
        }
    });

    // 加载Cesium官方提供的建筑物,注意了,这里使用了await的语法
    const buildingTileset = await Cesium.createOsmBuildingsAsync();
    viewer.scene.primitives.add(buildingTileset);

})

</script>

<style scoped>
#cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}

/* 隐藏底部 */
:deep(.cesium-viewer-bottom) {
    display: none !important;
}
</style>

结果如下所示:
在这里插入图片描述

总结

因为加载地形和建筑物需要请求的网络资源挺多的,所以,项目中Cesium初始化的加载,只是加载出地球,得到一个纯净版的地球。如果需要地形和建筑物,直接复制文章中相关的代码到对应的vue组件中就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效修复MySQL数据库

介绍 MySQL被广泛认为是最著名的数据库管理系统之一&#xff0c;是跨各种行业的许多应用的基础。mysql数据库的耐用性和效率是决定这些应用程序是否能不受任何干扰地运行的重要因素。需要对MySQL数据库进行定期维护&#xff0c;以防止发生以下情况:数据丢失和系统中断。此外&a…

springboot购物网站源码分享

开头&#xff1a;springboot购物网站源码分享 题目&#xff1a;springboot购物网站源码分享 主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff…

YOLOv8改进,YOLOv8主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点&#xff1a; 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…

大堆对象是如何影响程序的性能的

在本文中&#xff0c;我们将详细了解 JVM 如何存储对象及其在内存中的表示形式。此外&#xff0c;我们将深入探讨性能影响以及如何利用它们来获得优势。 *此外&#xff0c;我们将了解如何使用-XX:UseCompressedOops以及它如何影响应用程序的性能。此外&#xff0c;我们将了解U…

[大语言模型-论文精读] 阿里巴巴-通过多阶段对比学习实现通用文本嵌入

[大语言模型-论文精读] 阿里巴巴达摩院-GTE-通过多阶段对比学习实现通用文本嵌入 1. 论文信息 这篇论文《Towards General Text Embeddings with Multi-stage Contrastive Learning》介绍了一种新的文本嵌入模型&#xff0c;名为GTE&#xff08;General-purpose Text Embeddin…

低空经济时代:无人机飞行安全要点详解

随着低空经济的蓬勃发展&#xff0c;无人机&#xff08;UAV&#xff09;在农业、航拍、物流、应急救援等多个领域的应用日益广泛。然而&#xff0c;无人机的安全飞行不仅关乎任务的成功与否&#xff0c;更直接关系到地面人员、财产及空中交通的安全。本文将从飞行前检查、环境评…

大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【Linux学习】【Ubuntu入门】1-2 新建虚拟机ubuntu环境

1.双击打开VMware软件&#xff0c;点击“创建新的虚拟机”&#xff0c;在弹出的中选择“自定义&#xff08;高级&#xff09;” 2.点击下一步&#xff0c;自动识别ubuntu光盘映像文件&#xff0c;也可以点击“浏览”手动选择&#xff0c;点击下一步 3.设置名称及密码后&#xf…

1Panel安装部署证书(httpsok.com)

1Panel安装部署证书(httpsok.com) 购买服务器 推荐购买香港服务器&#xff0c;这样通过域名访问就不需要备案。 创建静态站点 申请SSL证书 进入 httpsok.com&#xff0c;点击申请证书 输入站点域名 根据提示&#xff0c;添加DNS解析记录 添加成功后&#xff0c;提示域名验证…

如何在AI绘画SD中调节光照?这2个超好用的方法别错过!轻松生成AI人像光感大片!

大家好&#xff0c;我是画画的小强 在AI绘画Stable Diffusion 摄影艺术中&#xff0c;灯光的运用对于照片的质量和情感表达至关重要。它不仅能够彰显主题&#xff0c;还能为画面增添深度与立体感&#xff0c;帮助传递感情&#xff0c;以及凸显细节之美。 下面&#xff0c;我将…

YD-D3无线遥控声光报警器,微波探测预警安全设备

YD-D3无线遥控声光报警器‌是一种广泛应用于工厂车间、水泥厂、起重机、叉车、仓库、门吊、港口、车站等场所的安全报警设备。它通过大分贝喇叭播报语音提示以及高亮灯光示警&#xff0c;为现场人员安全保驾护航。该报警器采用集成电路设计&#xff0c;音质优美&#xff0c;抗干…

航顺芯片HK32MCU受邀出席汽车芯片国产化与技术创新闭门研讨会

[中国&#xff0c;北京&#xff0c;2024年9月21日]近日&#xff0c;深圳市航顺芯片技术研发有限公司&#xff08;以下简称“航顺芯片”&#xff09;产品总监郑增忠受邀出席由中国设备管理协会新能源汽车产业发展促进中心主办的“汽车芯片国产化与技术创新闭门研讨会”。 会上航…

基于单片机电容测量仪仿真设计

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

Elasticsearch 8.16 和 JDK 23 中的语言环境变化

作者&#xff1a;来自 Elastic Simon Cooper 随着 JDK 23 即将发布&#xff0c;语言环境信息中有一些重大变化&#xff0c;这将影响 Elasticsearch 以及你提取和格式化日期时间数据的方式。首先&#xff0c;介绍一些背景知识。 什么是语言环境&#xff1f; 每次 Java 程序需要…

【Java】static-静态变量、静态方法、工具类、注意事项、args数组的使用

文章目录 一、静态变量特点调用方式 二、静态方法特点调用方式 三、类的类型1.Javabean类2.测试类3.工具类 四、注意事项从代码方面解释1. 上下文清晰2. 静态变量的访问例子注意 3. 静态方法中没有this关键字原因 4. 静态方法只能访问静态变量和静态方法错误原因解决方法 4.非静…

如何获取钉钉webhook

第一步打开钉钉并登录 第二步创建团队 并且 添加自定义 机器人 即可获取webhook

【流计算】流计算概论

前言 作者在之前写过一个大数据的专栏&#xff0c;包含GFS、BigTable、MapReduce、HDFS、Hadoop、LSM树、HBase、Spark&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?fromshareblogcolumn&sharetypeblogcolumn&sharerI…

待办事项应用SideQuests

赶在国庆长假前&#xff0c;自驾&#x1f697;出去玩了几天。 国庆前的错峰出游简直是太香了&#xff01;一路上&#x1f6e3;️畅通无阻&#xff0c;停车&#x1f17f;️不用抢&#xff0c;吃饭&#x1f354;不用等&#xff0c;景点&#x1f3de;️不用排队&#xff0c;拍照&…