Cesium教程03_加载b3dm高度

devtools/2024/11/27 21:14:01/

使用 Vue3 和 Cesium 构建三维地球场景并实现高度调整功能

引言

在现代 Web GIS(地理信息系统)开发中,Cesium 是一款功能强大的三维地球可视化工具。本文展示了如何使用 Vue3 与 Cesium 集成,实现一个支持调整高度功能的三维地球场景。

本文将通过以下几个步骤完成:

  1. 初始化 Cesium 场景。
  2. 加载 3D Tiles 模型。
  3. 实现高度动态调整功能。

功能演示

在完成本示例后,用户可以通过一个滑块实时调整 3D Tiles 模型的高度,观察模型在三维场景中的动态变化效果。

代码实现

以下是完整的代码实现,包括 templatescript 和样式部分。

1.关键代码

<template><div><!-- Cesium 容器 --><div ref="cesiumContainer" class="cesium-container"></div><!-- 工具栏 --><div class="toolbar"><!-- 高度调节滑块 --><label for="heightSlider">Adjust Height:</label><inputid="heightSlider"type="range"min="0"max="100"v-model="height"/><span>{{ height }} meters</span></div></div>
</template>
<script>
import { defineComponent, ref, onMounted, watch } from "vue";
import { Viewer, Cartesian3, Cartographic, Matrix4, Cesium3DTileset, Math as CesiumMath, Matrix3, Terrain } from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";export default defineComponent({name: "CesiumViewer",setup() {const cesiumContainer = ref(null);const viewer = ref(null);const tileset = ref(null);const height = ref(0);let rootTransform = null;const initCesium = async () => {if (!cesiumContainer.value) {console.error("Cesium container not found!");return;}try {viewer.value = new Viewer(cesiumContainer.value, {terrain: Terrain.fromWorldTerrain(),});tileset.value = await Cesium3DTileset.fromIonAssetId(40866);viewer.value.scene.primitives.add(tileset.value);viewer.value.zoomTo(tileset.value);rootTransform = Matrix4.clone(tileset.value.root.transform);tileset.value.modelMatrix = Matrix4.clone(rootTransform);tileset.value.root.transform = Matrix4.clone(Matrix4.IDENTITY);} catch (error) {console.error("Error initializing Cesium:", error);}};const updateHeight = (newHeight) => {if (!tileset.value) return;const numericHeight = Number(newHeight);if (isNaN(numericHeight)) {console.error("Invalid height value:", newHeight);return;}const boundingSphere = tileset.value.boundingSphere;const cartographic = Cartographic.fromCartesian(boundingSphere.center);const surface = Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);const offset = Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, numericHeight);const translation = Cartesian3.subtract(offset, surface, new Cartesian3());const newModelMatrix = Matrix4.fromTranslation(translation);tileset.value.modelMatrix = Matrix4.multiply(rootTransform, newModelMatrix, new Matrix4());};watch(height, (newHeight) => {updateHeight(newHeight);});onMounted(() => {initCesium();});return {cesiumContainer,height,};},
});
</script>

代码解析

1. 初始化 Cesium 场景

initCesium 方法初始化 Cesium Viewer,并加载全球地形数据。

2. 加载 3D Tiles 模型

通过 Cesium3DTileset.fromIonAssetId 方法加载指定的 3D Tiles 数据,并添加到场景中。

3. 高度调整逻辑

在 updateHeight 方法中,计算模型的新高度并动态更新其变换矩阵(modelMatrix)。

4. 数据绑定

通过 Vue 的 watch 方法监听高度滑块的值,调用 updateHeight 更新模型。
在这里插入图片描述

总结

本文介绍了如何使用 Vue3 与 Cesium 构建一个动态调整模型高度的三维场景。通过 Vue 的响应式机制和 Cesium 强大的三维渲染能力,可以轻松实现复杂的交互功能。

可扩展方向

添加旋转功能:可以扩展滑块,实现对模型的旋转控制。
多模型支持:通过动态加载不同的模型,构建丰富的场景。
高程匹配:集成高程数据,使模型与地形完美匹配。

参考资源

Cesium 官方文档
Vue3 官方文档
Cesium ion 数据库


http://www.ppmy.cn/devtools/137486.html

相关文章

OSPF路由状态数据库、type 类型、完整的LSA

【OSPF】 1.Lsdb&#xff1a;链路状态数据库【存放多条LSA——链路状态通告信息】 2..Dis ospf lsdb : 查看设备LSDB. 3.Ospf process__ with router ID __ &#xff1a; ospf的进程为___router_id为 ____. 4.Lsdb&#xff1a;链路状态数据库【存放多条…

R和Julia免疫细胞映射到组织切片

将免疫细胞映射到组织切片是一种整合多种技术的高精度方法&#xff0c;用于揭示细胞在组织微环境中的空间分布。通过使用如空间转录组学、免疫荧光染色或单细胞RNA测序等技术&#xff0c;科学家可以精确定位特定免疫细胞类型&#xff0c;并分析它们与组织结构或病理学变化的关联…

【MCU】微控制器的编程技术:ISP 与 IAP

在嵌入式领域中&#xff0c;将程序下载到内置 Flash 有两种技术 ISP (In-system programming) ISP 即在系统编程&#xff0c;是指一些可编程逻辑器件、微控制器、芯片组和其他嵌入式设备在安装到完整嵌入式系统后能够进行编程&#xff0c;而不需要在将芯片安装到系统中之前对…

修改Android Studio项目配置JDK路径和项目Gradle路径的GUI工具

概述 本工具提供了一个基于Python Tkinter的图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于帮助用户搜索并更新Android Studio项目中的config.properties文件里的java.home路径&#xff0c;以及workspace.xml文件中的last_opened_file_path路径。该工具旨在简化手动…

【设计模式】【行为型模式(Behavioral Patterns)】之命令模式(Command Pattern)

1. 设计模式原理说明 命令模式&#xff08;Command Pattern&#xff09; 是一种行为设计模式&#xff0c;它将请求封装成对象&#xff0c;从而使你可以用不同的请求对客户进行参数化、队列请求或将请求日志化&#xff0c;同时支持可撤销的操作。通过这种方式&#xff0c;可以将…

svn-git下载

windows&#xff1a; svn 客户端&#xff1a;-------------- TortoiseSVN 安装 下载地址&#xff1a;https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。 目前最新版为 1.11.0 下载地址&#xff1a; https://osdn.net/projects/tortoisesvn/storage/1.…

kali安装及使用docker和docker-compose

安装docker及docker-compose&#xff1a; &#xff08;这里我之前安装过了&#xff0c;借用别人的教程来讲解&#xff09; 更新可用软件包&#xff1a; apt-get update 开始安装docker&#xff1a; apt install docker.io 如果有让确认的&#xff0c;输入 y 即可&#xff1a…

springMVC 全局异常统一处理

全局异常处理⽅式⼀: 1、配置简单异常处理器 配置 SimpleMappingExceptionResolver 对象: <!-- 配置全局异常统⼀处理的 Bean &#xff08;简单异常处理器&#xff09; --> <bean class"org.springframework.web.servlet.handler.SimpleMappingExceptionReso…