Cesium 入门教程(基于 vue3)

目录

Cesium 介绍:

下载 Cesium,2种路径:

下载成功后,创建 vue3 项目:

编写内容

一个“纯”地球

添加图层

坐标系及其数值转换

相机位置及动态交互

添加物体和3维建筑物


Cesium 介绍:

        Cesium 是一个开源的 JavaScript 库,专门用于创建世界级的三维地球和地图可视化应用。它提供了强大的工具和功能,使开发者能够轻松地在浏览器中展示高分辨率的地形、影像以及三维模型。Cesium 支持多种数据格式,包括但不限于 3D Tiles、GeoJSON 和 glTF,这使得它成为处理地理空间数据的理想选择。无论是构建虚拟地球、城市规划模拟、还是气象数据分析,Cesium 都能提供必要的技术支持。此外,Cesium 还支持时间动态数据,允许用户通过时间轴查看历史数据变化或预测未来趋势。Cesium 的核心优势在于其无需任何插件即可运行于现代浏览器的能力,这意味着它可以跨平台使用,无论是在桌面端还是移动端都能保证流畅体验。同时,Cesium 提供了丰富的 API 接口,让开发者可以自由定制应用的功能与外观,极大地增强了项目的灵活性和扩展性。随着版本不断迭代更新,Cesium 正逐步成为地理信息系统(GIS)、智慧城市解决方案以及虚拟现实等多个领域不可或缺的技术之一。

下载 Cesium,2种路径:

1、官方页面:

Downloads – Cesiumhttps://cesium.com/downloads/

2、直接在项目中集成,输入:

npm install vite-plugin-cesium -D 

vite.config.js 配置如下:

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import cesium from 'vite-plugin-cesium' # 导入cesium // https://vitejs.dev/config/
export default defineConfig({plugins: [vue(), cesium() # 添加插件],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}
})

解压后在 vscode 中打开:

终端输入 启动命令:

npm start

启动后将提供一个本地 URL ,让您能够在离线状态下访问 Cesium 文档。

里面有很多案例和教程,可以离线学习:

下载成功后,创建 vue3 项目:

vue create cesium-basic

创建完 vue3 项目后,下载 cesium 库:

cnpm add cesium

复制 cesium 资源文件

将 cesium-basic 下的node_modules -- cesium -- Build -- Cesium 下的四个文件夹(Assets、ThirdParty、Widgets、Workers)复制到 public 目录下

再复制一个 Widgets 文件夹到 src 目录下

编写内容

打开 App.vue,删掉不需要的东西,写代码如下:

<template><div id="cesiumContainer"></div>
</template><script setup>import * as Cesium from 'cesium'import "./Widgets/widgets.css"import { onMounted } from 'vue';window.CESIUM_BASE_URL = "/";onMounted(()=>{new Cesium.Viewer("cesiumContainer");})
</script><style>
*{margin: 0;padding: 0;
}
</style>

生命钩子确保 App 被挂载后才将 Cesium Viewer 镶嵌到 cesiumContainer

  • Cesium.CESIUM_BASE_URL:这是一个全局配置项,用于定义Cesium库所需的所有静态资源的基础URL。通过修改这个值,你可以控制这些资源的加载位置。

  • "/":这里的单斜杠表示的是你的Web服务器的根目录。这意味着所有相对于此设置的资源请求都将从你的域名开始后的第一级路径进行查找。例如,若你需要加载位于Widgets/CesiumWidget/CesiumWidget.css的CSS文件,则实际请求的URL将是http://yourdomain.com/Widgets/CesiumWidget/CesiumWidget.css

代码写好后执行运行命令(注意控制台要切到 cesium-basic目录,可以cd cesium-basic):

npm run serve

运行后你就能拥有属于自己的“地球”了:

右上角还能切换3D或2D,还能切换图层,还要地区搜索功能,但感觉放大到某个地区后加载用时很长。

一个“纯”地球

默认界面会提示你去注册,并填写 Token,注册官网:Cesium ion

复制自己的访问令牌:

填写即可:

// 设置cesium tokenCesium.Ion.defaultAccessToken = "你的Token"

Ctrl + S 保存,Token 提示消失:

还有一些其他的默认设置,也都可以清除,具体代码如下:

 onMounted(()=>{var viewer =  new Cesium.Viewer("cesiumContainer",{// 去掉对话框警告infoBox:false,// 是否显示查询按钮geocoder: false,// 不显示home按钮homeButton:false,// 控制查看器的显示模式(3D、2.5D、2D是否显示)sceneModePicker:false,// 是否显示图层选择baseLayerPicker:false,// 是否显示帮助按钮navigationHelpButton:false,// 是否显示播放动画、计时animation:false,// 是否显示时间轴timeline:false,// 是否显示全屏按钮fullscreenButton:false,});// 隐藏图标viewer.cesiumWidget.creditContainer.style.display = "none";})// 设置cesium默认视角Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(// 西经115.8651,// 南维度28.7019,// 东经115.8709,// 北纬28.7053)

这样就能得到一个“干干净净”的三维地图:

添加图层

将国内的地图数据加载进去:

注册天地图账号:

天地图

登录后申请为个人开发者,创建新应用

拿到想要引入的url(url + Token):

如果 web 页面中的地球是蓝色的,就像这样:

请在创建 viewer 后输入:

viewer.imageryLayers.get(0).show = true;

还可以添加矢量图层:

const gaodeImageryProvider = new Cesium.UrlTemplateImageryProvider({url: "https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=4",minimumLevel: 1,maximumLevel: 18,});viewer.imageryLayers.addImageryProvider(gaodeImageryProvider);

效果:

坐标系及其数值转换

屏幕坐标系有三种:

1、二维笛卡尔坐标系 Cartesian2

2、地理坐标系,WGS-84坐标系,Cartographic(经纬高)

3、笛卡尔空间直角坐标系,Cartesian3类型

几个坐标系之间对象对应的数值可以互相转换:

// 角度转弧度
var radius = Cesium.Math.toRadians(90)
// 弧度转角度
var degress = Cesium.Math.toDegrees(2*Math.PI)
// 经纬度转换为笛卡尔坐标
var cartesian3 = Cesium.Cartesian3.fromDegrees(89.5,20.4,100
)
// 再转回经纬度
var cartographic = Cesium.Cartographic.fromCartesian(cartesian3)

相机位置及动态交互

相机位置

// setView瞬间到达指定位置var position = Cesium.Cartesian3.fromDegrees(116.393428,39.90923,100)viewer.camera.setView({destination:position,// 指定相机视角orientation:{// 相机朝向,偏航角heading:Cesium.Math.toRadians(0),// 相机俯仰角,0是竖直向上,-90是竖直向下pitch:Cesium.Math.toRadians(0),// 相机滚轮角roll:0,}})

动态控制相机飞往某地:

 viewer.camera.flyTo({destination:position,orientation:{heading:Cesium.Math.toRadians(0),pitch:Cesium.Math.toRadians(-20),roll:0,}})

通过按键触发(控制台输入)

// 通过按键移动相机
document.addEventListener("keydown",(e)=>{// 获取相机离地面的高度var height = viewer.camera.positionCartographic.height;var moveRate = height / 100;if(e.key=="w"){viewer.camera.moveForward(moveRate);}else if(e.key=="s"){viewer.camera.moveBackward(moveRate)}else if(e.key=="a"){viewer.camera.moveLeft(moveRate)}else if(e.key=="d"){viewer.camera.moveRight(moveRate)}else if(e.key=="q"){viewer.camera.lookLeft(Cesium.Math.toRadians(0.1));}else if(e.key=="e"){viewer.camera.lookRight(Cesium.Math.toRadians(0.1));}else if(e.key=="r"){viewer.camera.lookUp(Cesium.Math.toRadians(0.1))}else if(e.key=="f"){viewer.camera.lookDown(Cesium.Math.toRadians(0.1));}
})

添加物体和3维建筑物

3D建筑教学:【Cesium入门】在3D城市中可视化一个拟建的建筑 - csincs - 博客园用你自己的3D模型替换真实城市中的建筑。 你可以用这种方法来可视化拟建建筑的影响。它会如何改变天际线?从特定楼层或房间看,视图会是什么样的?https://www.cnblogs.com/csincs/articles/18281550

添加一个点:

// 添加一个点
var point = viewer.entities.add({position:Cesium.Cartesian3.fromDegrees(115.8247,28.7143,100),point:{pixelSize:10,color:Cesium.Color.RED,outlineColor:Cesium.Color.WHEAT,outlineWidth:4,}
})

感谢您的观看,后续将持续更新!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣——合并K个排序链表

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 同步合并 已知顺序排列&#xff0c;每个链表的node比较再加进结果&#xff0c;用优先队列方便比较node&#xff0c;可以先把每个链表的头结点加进队列&#xff0c;然后队列头出&#xff0c;出来的头还有n…

可复用表格组件设计与实现:分页、排序、筛选全功能解析

文章目录 一、组件设计思路1.1 功能需求分析1.2 技术选型 二、组件架构设计2.1 组件结构2.2 数据流设计 三、核心代码实现3.1 基础表格组件3.2 状态管理 四、功能模块实现4.1 分页组件4.2 排序控制4.3 筛选控制 五、性能优化方案5.1 虚拟滚动5.2 防抖筛选 六、完整测试方案6.1 …

Unity屏幕适配——立项时设置

项目类型&#xff1a;2D游戏、竖屏、URP 其他类型&#xff0c;部分原理类似。 1、确定设计分辨率&#xff1a;750*1334 为什么是它&#xff1f; 因为它是 iphone8 的尺寸&#xff0c;宽高比适中。 方便后续适配到真机的 “更长屏” 或 “更宽屏” 2、在场景…

PawSQL for TDSQL:腾讯云TDSQL数据库性能优化全攻略

TDSQL 作为腾讯云推出的分布式数据库&#xff0c;凭借其高扩展性、高可用性和高性能等优势&#xff0c;广泛应用于金融、互联网、政务等领域。随着业务的不断增长和数据量的爆炸式增长&#xff0c;如何优化 TDSQL 数据库的性能&#xff0c;成为众多企业和开发者面临的挑战。本文…

机器学习(七)

一&#xff0c;监督学习和无监督学习聚类的数据集比较&#xff1a; 监督学习&#xff1a; 数据集包括输入的数据和与之对应的标签 无监督学习&#xff1a; 数据集仅含有输入的数据&#xff0c;要求算法自己通过所给的数据集来确定决策边界 二&#xff0c;聚类(Clustering): 聚…

海鲜水产行业wordpress外贸主题

模板采用清新的海洋风格设计&#xff0c;完美契合水产和海鲜行业的特点&#xff0c;让您的网站在众多竞争者中脱颖而出。 高质量的图片展示区域&#xff0c;让您可以展示新鲜捕捞的海鲜产品&#xff0c;吸引客户的注意力。 多功能性&#xff0c;满足业务需求&#xff1a; 模…

调优案例一:堆空间扩容提升吞吐量实战记录

&#x1f4dd; 调优案例一&#xff1a;堆空间扩容提升吞吐量实战记录 &#x1f527; 调优策略&#xff1a;堆空间扩容三部曲 # 原配置&#xff08;30MB堆空间&#xff09; export CATALINA_OPTS"$CATALINA_OPTS -Xms30m -Xmx30m"# 新配置&#xff08;扩容至120MB&am…

【大模型系列】llama.cpp本地运行大模型

上一篇链接: 【大模型系列】使用ollama本地运行千问2.5模型 我们讲了ollama本地运行大模型&#xff0c;这里我们介绍另一种本地运行大模型的方法&#xff1a;llamacpp 软件下载 下载地址&#xff1a;https://github.com/ggml-org/llama.cpp/releases 下载cpu版本的llamacpp&a…

maven之自定义插件

写在前面 在使用maven肯定是离不开插件的&#xff0c;比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件&#xff0c;但是为了使用的过程中更加的清晰&#xff0c;来尝试自定义插件还是很有必要的&#xff0c;所以本文就一起来…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17&#xff0c;该无人机上集成了四目视觉&#xff0c;三维激光雷达&#xff0c;云台吊舱&#xff0c;高算力的机载计算机&#xff0c;是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…

【瞎折腾/Dify】使用docker离线部署Dify

文章目录 说在前面安装Docker(外网)获取Dify源码(外网)拉取docker镜像(外网)导出镜像(内网)导入镜像(内网)运行问题 说在前面 外网操作系统&#xff1a;windows内网操作系统&#xff1a;ubuntu外网docker desktop版本&#xff1a;4.29.0外网docker版本&#xff1a;version 26.0…

【Git】配置Git

配置Git 忽略特殊文件 在日常开发中&#xff0c;有些文件不想或不应该提交到远端&#xff0c;如保存数据库密码的配置文件。 在Git工作区的根目录下创建一个特殊的.gitignore文件&#xff0c;把要忽略的文件名填进去&#xff0c;Git就会自动忽略这些文件。 不需要从头写.gi…

mysql学习-常用sql语句

1、安装mysql参考网上链接&#xff0c;进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

PostgreSQL16 的双向逻辑复制

一、配置 双向逻辑复制具体步骤 参考:PostgreSQL 16 双向逻辑复制与事务回环控制 - 墨天轮 1. 安装和准备环境 确保在所有参与复制的服务器上都安装了 PostgreSQL 16。主服务器&#xff1a;192.168.0.100从服务器&#xff1a;192.168.0.102 2. 配置 PostgreSQL 在每个服务…

FastAPI复杂查询终极指南:告别if-else的现代化过滤架构

title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…

C++前缀和

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好&#xff0c;今天我们来了解一下C的一个重要概念&#xff1a;前缀和 目录 1.什么是前缀和 2.前缀和的用法 1.前缀和的定义 2.预处理前缀和数组 3.查询区间和 4.数组中某个区间的和是否为特定…

机器学习基础

目录 泛化误差 偏差和方差 噪声 生成模型和判别模型 正态分布&#xff08;Normal Distribution&#xff09; 超参数选择 Grid Search 网格搜索 Random Search 随机搜索 Hyperopt Hyperas 参数估计方法对比 MLE 最大似然估计 MAP最大后验估计 贝叶斯估计 距…

中山六院团队发表可解释多模态融合模型Brim,可以在缺少分子数据时借助病理图像模拟生成伪基因组特征|顶刊解读·25-02-14

小罗碎碎念 在癌症诊疗领域&#xff0c;精准预测患者预后对临床决策意义重大。传统的癌症分期系统&#xff0c;如TNM分期&#xff0c;因无法充分考量肿瘤异质性&#xff0c;难以准确预测患者的临床结局。而基于人工智能的多模态融合模型虽有潜力&#xff0c;但在实际临床应用中…

系统可观测性(5)OpenTelemetry基础使用

系统可观测性(5)OpenTelemetry基础概念 Author: Once Day Date: 2025年3月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 本文档翻译整理自《OpenTelemetry Docs》&a…

OpenHarmony自定义子系统、部件与模块

如图所示&#xff0c;OpenHarmony系统源码中&#xff0c;大体上按照不同种类的功能分成多个子系统&#xff0c;然后一个子系统内部进一步在同类功能上的差异性划分成一个或多个部件&#xff0c;也就是说一个部件表示一个具体功能的源码集合。最后一个部件的源码再划分成一个或多…