【GIS开发小课堂】vue3+Cesium.js三维WebGIS项目实战(一)

news2024/9/25 23:21:21

随着市场对数字孪生的需求日益增多,对于前端从业者的能力从对框架vue、react的要求,逐步扩展到2D、3D空间的交互,为用户提供更紧密的立体交互。近年来前端对GIS的需求日益增多。

本文档详细介绍了使用Vue3和Cesium.js构建三维WebGIS项目的步骤,涵盖Cesium的基础知识、项目搭建、坐标转换、相机系统、地图与地形加载、空间数据管理和交互等内容,旨在为前端开发者提供一个立体交互的GIS学习路径。

目录

一、WebGlS简介

  1. CesiumJS简介

  2. CesiumJS源代码

二、项目快速搭建

  1. 使用vite快速搭建vue3+typeScript

  2. 安装Cesium插件

  3. 配置vite.config.js

  4. 清空style.css

  5. 在App.vue里面进行全局导入

  6. 运行程序

三、认识Cesium四大类

  1. 查看器类Vewer

  2. 场景类Scene

  3. 实体类编辑Entity数据源集合类DataSourceCollection

四、Cesium的坐标与转换

1.WGS84经纬度坐标系-没有实际的对象

2.WGS84弧度坐标系(Cartographic):构造函数法/静态函数法

3.笛卡尔空间直角坐标系(Cartesian3)*重要

4.平面坐标系(Cartesian2)

5.4D笛卡尔坐标系(Cartesian4)-用的较少

坐标系相互转换

  • WGS84转笛卡尔空间直角坐标系

  • 笛卡尔空间直角坐标系转WGS84

  • 平面坐标系转场景WGS84坐标

  • 屏幕坐标转地表坐标

  • 屏幕坐标转椭球面坐标

五、重要Cesium相机系统

1.setVew方法

2.fyTo方法

3.lookAt方法

4.viewBoundingSphere方法

六、Cesium地图和地形加载

1.注册Cesium lon

2.加载公路地图数据

3.加载地形数据

4.添加建筑体

七、Cesium空间数据加载

  1. 几何体--点加载

  2. 几何体--线加载

  3. 几何体--面加载

  4. 几何体--3D模型加载

  5. 文字--标签加载

八、Cesium空间数据管理

  1. 添加我的博客立牌

  2. entity增删改

  3. add新增

  4. remove移除

  5. getByld获取当个实体

  6. removeAl移除全部

九、Cesium鼠标交互

  1. 案例-鼠标左击弹出消息

十、三维数据格式3DTiles

十-、Cesium时间系统

十二、Cesium粒子系统

Vue3+Cesium.js三维WebGIS项目实战

一、WebGIS简介

WebGIS(Web地理信息系统)是指利用 Web 技术来构建和展示地理信息系统(GIS),使用户可以通过 Web 浏览器访问、查询、分析和可视化地理空间数据。WebGIS 通常结合地图服务、地理信息数据库、前端地图库和相关的数据处理技术,为用户提供交互式的地图浏览和空间数据分析功能。 

CesiumJS简介

Cesium是使用JavaScript开发的基于WebGL的,实现三维地球和地图可视化的JS库。支持海量的三维模型数据、影像数据,地形数据,矢量数据等丰富的地理数据加载。在智慧城市、交通、规划、城市管理、地形仿真领域有着非常广泛的应用。Cesium为三维的GIS提供了一个高效的数据可视化平台。

Viewer - Cesium Documentation

链接:

http://cesium.xin/cesium/cn/Documentation1.95/Viewer.html?classFilter=viewer

CesiumJS是目前最流行的三维数字地球渲染引擎,不仅可以在网页端高效运行,而且可以借助虚幻引擎在CS端渲染出和游戏一样的高质量效果。

Cesium支持3D、2D、2.5D形式的地图展示,可以自行绘制图形,高亮区域。

CesiumJS源代码访问官网

https://cesium.com/downloads/

图片

二、项目快速搭建

快速搭建一个下面的Cesium.js官方示例

图片

使用vite快速搭建vue3+typeScript

使用下面命令创建vue项目

npm create vite@latest
  • 设置项目名称

  • 选择使用vue

  • 选择是否使用typescript+vue 

安装Cesium插件

npm i cesium vite-plugin-cesium vite -D

配置vite.config.js

vite.config.js中配置如下:

import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import cesium from 'vite-plugin-cesium';

export default defineConfig({  plugins: [vue(),cesium()]});

清空style.css

图片

在App.vue里面进行全局导入

需要id为cesiumContainer的div挂载后再执行Cesium的代码,给html、body加样式屏幕撑满。

注意:viewer实例的创建必须在onMounted之后进行,确保元素已经挂载到页面上,保证地图的顺利渲染​​​​​​​

<template>  <div id="cesiumContainer"></div></template>
<script setup>import * as Cesium from 'cesium';import { onMounted } from 'vue';onMounted(() => {  const viewer = new Cesium.Viewer('cesiumContainer',{      infoBox: false, // 禁用沙箱,解决控制台报错    });});</script>
<style>#app {  font-family: Avenir, Helvetica, Arial, sans-serif;  -webkit-font-smoothing: antialiased;  -moz-osx-font-smoothing: grayscale;  text-align: center;  color: #2c3e50;}html,body,#cesiumContainer{  width: 100%;  height: 100%;  padding: 0;  margin: 0;  overflow: hidden;}</style>

这段代码中的cesiumContainer是用作Cesium Viewer(查看器)的挂载点。在WebGL渲染中,无论是二维还是三维图像,都需要一个容器来承载渲染的内容。在这里,<div id="cesiumContainer"></div> 元素就是用来承载Cesium Viewer所渲染的内容。

当你创建一个Cesium Viewer实例时,你需要指定一个DOM元素作为其容器,Cesium会将渲染的内容放置在这个DOM元素中。

通过new Cesium.Viewer('cesiumContainer', {...}),将Cesium Viewer挂载到id为cesiumContainer的div元素上,从而实现了Cesium渲染的效果。

其实无论是二维还是三维图像渲染,都需要一个挂载点来显示渲染的内容,而在这里cesiumContainer就充当了这样的作用。原理都是相同的哈~

运行程序

npm run dev

即可得到上面示例的gif效果

图片

页面涉及的空间如下,所有的空间都可以关闭

geocoder: 位置查找工具

baseLayerPicker: 图层选择器(地形影像服务)

homeButton: 视角返回初始位置

fullscreenButton: 全屏

animation: 左下角仪表盘(动画器件)

timeline: 底部时间线

sceneModePicker: 选择视角的模式(球体、平铺、斜视平铺)

navigationHelpButton: 导航帮助按钮

infoBox: 信息框控件

navigationInstructionsInitiallyVisible: 导航说明初始可见

shouldAnimate: 动画

requestWaterMask: 请求水面罩

requestVertexNormals: 请求顶点法线

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。     原文链接:https://blog.csdn.net/qq_36384657/article/details/136194962

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

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

相关文章

数据结构07

文章目录 二叉树的坡度二叉树的右视图 二叉树的坡度 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), l…

配置vscode终端自动激活anaconda的python环境

前言 每次使用vscode写python代码的时候&#xff0c;都需要在外面跑一个anaconda prompt&#xff0c;激活环境&#xff0c;然后进入对应的文件夹&#xff0c;运行代码&#xff0c;特别麻烦&#xff0c;所以想&#xff0c;能不能直接在vscode终端里面激活环境然后运行。 第一步…

FIFO求和实验

前言 FIFO&#xff08;先进先出&#xff09;队列在图像处理中的应用非常广泛&#xff0c;特别是在需要处理实时数据流和保证数据顺序的场景中。以下是一些具体应用实例&#xff1a;在实时视频流处理中&#xff0c;FIFO队列用于缓存图像帧。这样可以确保图像数据按照捕获顺序被处…

828华为云征文|华为云Flexus X实例docker部署harbor镜像仓库

828华为云征文&#xff5c;华为云Flexus X实例docker部署harbor镜像仓库 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定不要错…

如何培养积极的心态:策略与建议

积极的心态是通往幸福与成功的关键。它不仅影响着我们的日常生活质量&#xff0c;还决定了我们在面对困难时的态度和反应。本文将介绍一些实用的方法&#xff0c;帮助你建立并维持一种积极向上的生活态度。 积极心态的意义 拥有积极心态的人往往能够&#xff1a; 更快地恢复…

avi转换成mp4,这6种方法助你快速转换

视频格式的兼容性一直是用户关注的焦点。AVI作为一种较老的视频格式&#xff0c;虽然在一些特定场合下仍有应用&#xff0c;但MP4格式因其广泛的兼容性和较小的文件体积&#xff0c;已成为主流的视频格式。本文将详细介绍六种将AVI转换成MP4的方法&#xff0c;一起来了解下吧。…

安卓手机照片误删? 2024最新恢复办法分享

不小心将安卓手机照片误删了&#xff0c;该怎么办呢&#xff1f;相信不少人都遇到过类似困扰&#xff0c;别担心&#xff0c;下面小编就分享几种华为手机数据恢复办法&#xff0c;助大家快速找回误删照片。 方法一&#xff1a;从「回收站」中恢复照片 安卓手机通常都具备回收站…

17 连接池原理

可以设计一个mysql的连接池&#xff0c;提高效率 提前建立一个连接池&#xff0c;这里面创建线程池&#xff0c;和mysql建立连接&#xff0c;维护一个任务队列。有任务到来时&#xff0c;将任务放入任务队列&#xff0c;任务结构是要执行的sql语句和需要的回调函数&#xff0c…

信息化项目验收测试的必要性,第三方软件测评机构的进行步骤

随着信息化时代的到来&#xff0c;各类软件项目在企业中得到了越来越广泛的应用。为了保障项目的顺利交付&#xff0c;确保软件系统的功能、性能和稳定性&#xff0c;验收测试成为了一个不可或缺的环节。 一、信息化项目验收测试   信息化项目验收测试是对软件项目最终成果进…

py脚本 银行帐号格式化显示4个数字一组

假设你想要将银行帐号以某种特定的格式&#xff08;例如&#xff0c;每 4 位数字加一个空格&#xff09;进行格式化。 示例代码 以下是一个示例 Python 脚本&#xff0c;将银行帐号格式化为每 4 位数字加一个空格的形式&#xff1a; def format_bank_account(account_number…

CSS实现文字环绕圆形展示

展示区域 代码区域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

Webpack详解与配置环境

webpack&#xff1a;webpack网址 1、工作原理&#xff1a; Webpack是一个非常强大的静态模块的打包工具。从文件入口开始&#xff0c;递归解析以来关系&#xff0c;然后将所有模块打包成一个或多个budle文件。 2、webpack核心概念&#xff1a; Entry&#xff1a;入口起点(en…

前端使用xlsx模板导出表格

前言 前端导出表格有很多种方案&#xff0c;但是表格样式一旦复杂了&#xff0c;那么就得用代码写excel的样式&#xff0c;还是比较麻烦的。每次样式不一样&#xff0c;就得重新写&#xff0c;这时使用表格模板的优势就体现出来了&#xff0c;想导出不同样式的表格直接修改表格…

UMI复现代码解读全流程 视觉部分(六)——06_generate_dataset_plan.py(尚在更新)

视觉主要采用orb-slam3,分为主文件run_slam_pipeline和7个副文件在文件夹scripts_slam_pipeline中 06生成了pkl文件,是run_slam_pipeline的最终一步 06注释版已发到群里 06是一个比较重要的文件,定义了训练时的运动末端参数,作为训练输入 @click.option(-to, --tcp_offset…

uniapp 懒加载、预加载、缓存机制深度解析

uniapp 懒加载、预加载、缓存机制深度解析 文章目录 uniapp 懒加载、预加载、缓存机制深度解析一、为什么要使用uniapp的懒加载、预加载和缓存机制二、如何使用uniapp的懒加载、预加载和缓存机制1. 懒加载2. 预加载3. 缓存机制 四、扩展与高级技巧1. 结合懒加载和预加载优化页面…

2024数博会技术成果回顾 | KPaaS助力企业数智化转型

2024年8月28日至30日&#xff0c;中国国际大数据产业博览会&#xff08;简称“数博会”&#xff09;在贵州省贵阳市隆重举行。本届数博会以“数智共生&#xff1a;开创数字经济高质量发展新未来”为主题&#xff0c;吸引了来自全球各地的400多家企业和2.1万余名嘉宾参与&#x…

UART串口通信——FPGA学习笔记9

一、数据通信基本概念 按数据通信方式分类&#xff1a; 串行通信、并行通信 按数据传输方向分类&#xff1a; 单工通信、半双工通信、全双工通信 按数据同步方式分类&#xff1a; 同步通信、异步通信 常见的串行通信接口&#xff1a; 二、串口通信&#xff1a; UART 是一种…

Cobalt Strike 4.8 用户指南-第六节-Payload Artifacts和反病毒规避

Fortra 经常回答有关规避的问题。Cobalt Strike 会绕过反病毒产品吗&#xff1f;它绕过了哪些反病毒产品&#xff1f;多久检查一次&#xff1f; Cobalt Strike 默认Artifact可能会被大多数端点安全解决方案拦截。尽管规避不是Cobalt Strike产品默认的目标&#xff0c;但Cobalt…

记一次cms的web渗透测试练习

点击文章发现 尝试进行sql注入 得到漏洞为数字型 通过order by语句得到字段总数为15 通过union联合查询得到显示的字段编号 将database()带入得到数据库名为cms 接下来就是查表名、字段名、具体数据 发现密码经过加密&#xff0c;尝试解密 通过解密得知admin账户的密码为12…

潮玩宇宙斗兽场游戏源码多个猿猴boss模式玩法开发成品案例代码示例

潮玩宇宙中的斗猿场是很多潮玩人都喜欢玩的一种大逃杀类游戏&#xff0c;玩法大概是这样的&#xff0c;玩家选择一个格子躲避恶猿&#xff0c;满足人数后恶猿会按随机数顺时针前行&#xff0c;在某个格子停留后杀死里面所有猴子&#xff0c;被踩中的格子内的玩家则会被恶猿杀掉…