vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
接到一位知识星友的邀请,实现他需要3Dtiles三维模型的简单高度调整需求,适合学习Cesium与前端框架结合开发3D可视化项目。
demo源码运行环境以及配置
运行环境:依赖Node安装环境,demo本地Node版本:推荐v18+。
运行工具:vscode或者其他工具。
配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm install
(2)启动demo命令:npm run dev (3)打包demo命令: npm run build
技术栈
Vue 3.5.13
Vite 6.2.0
Cesium 1.128.0
示例效果
核心源码
<template><div id="cesiumContainer" class="cesium-container"><!-- 模型调整控制面板 --><div class="control-panel"><div class="panel-header"><h3>3D模型调整</h3></div><div class="panel-body"><!-- 高度调整 --><div class="control-group"><label>高度调整:</label><input type="range" min="-100" max="100" step="1" v-model="heightOffset" @input="updateHeight" /><span>{{ heightOffset }}米</span></div><!-- 重置按钮 --><div class="control-group"><button @click="resetModel">重置模型</button></div></div></div></div>
</template>
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';
import * as Cesium from 'cesium';
// 定义模型调整参数
const heightOffset = ref(0);
// 保存原始模型矩阵
let originalModelMatrix = null;
// Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M';
// 设置cesium静态资源路径
// window.CESIUM_BASE_URL = "/";
// 声明Cesium Viewer实例
let viewer, tileset = null;
let handler = null;
// 组件挂载后初始化Cesium
onMounted(async () => {// 初始化Cesium Viewerviewer = new Cesium.Viewer('cesiumContainer', {// 基础配置animation: false, // 动画小部件baseLayerPicker: false, // 底图选择器fullscreenButton: false, // 全屏按钮vrButton: false, // VR按钮geocoder: false, // 地理编码搜索框homeButton: false, // 主页按钮infoBox: false, // 信息框 - 禁用点击弹窗sceneModePicker: false, // 场景模式选择器selectionIndicator: false, // 选择指示器timeline: false, // 时间轴navigationHelpButton: false, // 导航帮助按钮navigationInstructionsInitiallyVisible: false, // 导航说明初始可见性scene3DOnly: false, // 仅3D场景});// 隐藏logoviewer.cesiumWidget.creditContainer.style.display = "none";viewer.scene.globe.enableLighting = true;// 取消天空盒显示// viewer.scene.skyBox.show = false;// 禁用大气层和太阳viewer.scene.skyAtmosphere.show = false;// viewer.scene.sun.show = false;// viewer.scene.moon.show = false;// 设置背景为黑色// viewer.scene.backgroundColor = Cesium.Color.BLACK;//前提先把场景上的图层全部移除或者隐藏 // viewer.scene.globe.baseColor = Cesium.Color.BLACK; //修改地图蓝色背景viewer.scene.globe.baseColor = new Cesium.Color(0.0, 0.1, 0.2, 1.0); //修改地图为暗蓝色背景// 设置抗锯齿viewer.scene.postProcessStages.fxaa.enabled = true;// 清除默认底图viewer.imageryLayers.remove(viewer.imageryLayers.get(0));// 加载底图 - 使用更暗的地图服务// const imageryProvider = await Cesium.ArcGisMapServerImageryProvider.fromUrl("https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer");const imageryProvider = await Cesium.ArcGisMapServerImageryProvider.fromUrl("https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer");const layer = viewer.imageryLayers.addImageryProvider(imageryProvider);// 调整图层亮度和对比度,使其更暗layer.brightness = 0.8; // 降低亮度layer.contrast = 1.8; // 调整对比度// 设置默认视图位置 - 默认显示全球视图viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(104.0, 30.0, 10000000.0), // 中国中部上空orientation: {heading: 0.0,pitch: -Cesium.Math.PI_OVER_TWO,roll: 0.0}});// 启用地形深度测试,确保地形正确渲染viewer.scene.globe.depthTestAgainstTerrain = true;// // 清除默认地形// viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider({});const terrainProvider = await Cesium.CesiumTerrainProvider.fromIonAssetId(3956);viewer.terrainProvider = terrainProvider;// 开启帧率viewer.scene.debugShowFramesPerSecond = true;// 使用异步方式加载3D Tiles数据集try {tileset = await Cesium.Cesium3DTileset.fromUrl("./public/data/tileset.json");// 设置3DTiles的样式,确保每个要素都有一个唯一的IDtileset.style = new Cesium.Cesium3DTileStyle({// 使用默认样式,但确保每个要素都可以被单独选择color: "color('white')"});// 保存原始模型矩阵,用于重置originalModelMatrix = Cesium.Matrix4.clone(tileset.modelMatrix);// 设置模型贴地// 启用贴地属性tileset.clampToGround = true;viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset);} catch (error) {console.error("加载3D Tiles数据集失败:", error);}
});
// 更新模型高度
const updateHeight = () => {if (!tileset) return;// 创建一个新的矩阵,用于调整高度const heightMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(0, 0, Number(heightOffset.value)));……
};
……
</script>
相关文章:

vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
接到一位知识星友的邀请,实现他需要3Dtiles三维模型的简单高度调整需求,适合学习Cesium与前端框架结合开发3D可视化项目。 demo源码运行环境以及配置 运行环境:依赖Node安装环境,demo本地Node版本:推荐v18。 运行工具:…...

线程池RejectedExecutionException异常
文章目录 1、报错2、定位3、修复4、线程池使用的一点思考 1、报错 检索项目日志时,发现一个异常堆栈信息,核心报错: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.CompletableFuture$AsyncSupply480a10c7…...
lanqiaoOJ 1508:N皇后问题 ← dfs
【题目来源】 https://www.lanqiao.cn/problems/1508/learning/ 【题目描述】 在 NN 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意 2 个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成 45角的斜线上。你的任务是…...

当 “欧洲版 Cursor” 遇上安全危机
在 AI 编程助手蓬勃发展的当下,安全问题正成为行业不容忽视的隐忧。近期,AI 编程助手公司 Replit 与号称 “欧洲版 Cursor” 的 Lovable 之间,因安全漏洞问题掀起了一场风波,引发了业界的广泛关注。 Replit 的员工 Matt Palmer…...
[蓝桥杯]生物芯片
生物芯片 题目描述 X 博士正在研究一种生物芯片,其逻辑密集度、容量都远远高于普通的半导体芯片。 博士在芯片中设计了 nn 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮。 这些光源…...
Spring Boot使用Redis实现分布式锁
在分布式系统中,分布式锁是一种解决并发问题的常用技术。Redis由于其高性能和丰富的特性,成为实现分布式锁的理想选择。本文将详细介绍如何在Spring Boot应用中使用Redis实现分布式锁。 一、环境准备 安装Redis:确保已经安装并运行Redis服务…...

【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
AA. 我的开发环境配置与核心工具链解析 一、开发环境全览 C:\Users\Again>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-29, mixed m…...

(Python网络爬虫);抓取B站404页面小漫画
目录 一. 分析网页 二. 准备工作 三. 实现爬虫 1. 抓取工作 2. 分析工作 3. 拼接主函数&运行结果 四. 完整代码清单 1.多线程版本spider.py: 2.异步版本async_spider.py: 经常逛B站的同志们可能知道,B站的404页面做得别具匠心&…...

【氮化镓】GaN HMETs器件物理失效分析进展
2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…...
vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行
参数顺序问题:OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称,这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信…...

Abaqus连接器弹片正向力分析:
.学习重点: • 外部幾何匯入。 • 建立解析剛性面。 • 利用Partition與局部撒點來提高網格品質。 • 材料塑性行為(材料非線性)。 • 考慮大變形(幾何非線性)。 • 接觸(邊界非線性)。 • 平移組裝。 • 設定輸出參數。 • 討論Shear Locking & Hourglassing效應。 1) 設…...

鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章
随着信创国产化战略的深入推进和鸿蒙操作系统(HarmonyOS Next)的迅速崛起,市场对兼容国产软件生态的需求日益增长。在这一背景下,中安身份证识别和银行卡识别技术应运而生,为鸿蒙生态的发展注入了新的活力。 移动端身份…...
mybatis打印完整的SQL,p6spy
介绍打印完成的SQL,会降低性能,不要在生产环境使用,我只是在本地,自己的代码中设置,不提交。主要是为了方便,在控制台看见SQL的时候,不用去拼接参数,可以直接复制出来执行。 配置方…...

NLP学习路线图(十九):GloVe
自然语言处理(NLP)的核心挑战在于让机器理解人类语言的丰富含义。词向量(Word Embeddings)技术通过将词语映射到高维实数空间,将离散的符号转化为连续的向量,为NLP任务奠定了坚实基础。在众多词向量模型中&…...

如何使用DAXStudio将PowerBI与Excel连接
如何使用DAXStudio将PowerBI与Excel连接 之前分享过一篇自动化文章:PowerBI链接EXCEL实现自动化报表,使用一个EXCEL宏工作薄将PowerBI与EXCEL连接起来,今天分享另一个方法:使用DAX Studio将PowerBI与EXCEL连接。 下面是使用DAX S…...

软考 系统架构设计师系列知识点之杂项集萃(79)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(78) 第141题 软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机…...
神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)
🧠 神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期) 哈喽!各位AI探索者们!👋 上期我们把数学"怪兽"给驯服了,是不是感觉还挺轻松的?今天我们要进…...

UVa12298 Super Joker II
UVa12298 Super Joker II 题目链接题意输入格式输出格式 分析AC 代码 题目链接 UVa12298 Super Joker II 题意 有一副超级扑克,包含无数张牌。对于每个正合数p,恰好有4张牌:黑桃p,红桃p,梅花p和方块p(分别…...
面向对象系统中对象交互的架构设计哲学
更多精彩请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎-CSDN博客 一、对象交互的本质与设计矛盾 在面向对象范式(OOP)中,对象间的交互实质上是软件组件解耦与功能复用的动态平衡过程。每个对象作为独立的计算单元,既需要维护…...

【网络安全】SRC漏洞挖掘思路/手法分享
文章目录 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “复制该主机所有 URL”:包含该主机上的所有接口等资源。 “复制此主机里的链接”:包括该主机加载的第三…...

【AFW+GRU(CNN+RNN)】Deepfakes Detection with Automatic Face Weighting
文章目录 Deepfakes Detection with Automatic Face Weighting背景pointsDeepfake检测挑战数据集方法人脸检测面部特征提取自动人脸加权门控循环单元训练流程提升网络测试时间增强实验结果Deepfakes Detection with Automatic Face Weighting 会议/期刊:CVPRW 2020 作者: …...
【面试】音视频面试
C内存模型 H.265(HEVC)相比H.264(AVC)的核心优势 1. 压缩效率显著提升 在相同画质下,H.265的码率比H.264降低约40-50%,尤其适用于4K/8K超高清场景。通过**更大的编码单元(CTU,最大…...

性能优化 - 案例篇:缓冲区
文章目录 Pre1. 引言2. 缓冲概念与类比3. Java I/O 中的缓冲实现3.1 FileReader vs BufferedReader:装饰者模式设计3.2 BufferedInputStream 源码剖析3.2.1 缓冲区大小的权衡与默认值 4. 异步日志中的缓冲:Logback 异步日志原理与配置要点4.1 Logback 异…...
Java编程之建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。这种模式允许你分步骤构建一个复杂对象,并且可以在构建过程中进行不同的配置。 模式的核…...
基于TI DSP控制的光伏逆变器最大功率跟踪mppt
基于TI DSP(如TMS320F28335)控制的光伏逆变器最大功率跟踪(MPPT)程序通常涉及以下几个关键部分:硬件电路设计、MPPT算法实现、以及DSP的编程。以下是基于TI DSP的光伏逆变器MPPT程序的一个示例,主要采用扰动…...
Python玩转自动驾驶仿真数据生成:打造你的智能“路测场”
Python玩转自动驾驶仿真数据生成:打造你的智能“路测场” 说到自动驾驶,很多人第一时间想到的是那些造车新势力、激光雷达、传感器、深度学习模型……确实,这些都是自动驾驶的核心硬核。但我今天想和你聊聊一个“幕后功臣”——仿真数据生成。没错,自动驾驶离不开大数据,更…...
从测试角度看待CI/CD,敏捷开发
什么是敏捷开发? 是在高强度反馈的情况下,短周期,不断的迭代产品,满足用户需求,抢占更多的市场 敏捷开发是什么? 是一种产品快速迭代的情况下,降低出错的概率,具体会落实到公司的…...
agent mode 代理模式,整体要求,系统要求, 系统指令
1. 起因, 目的: 我发现很多时候,我在重复我的要求。很烦。决定把一些过程记录下来,提取一下。 2. 先看效果 无。 3. 过程: 要求: 这2个文件,是我与 AI 聊天的一些过程记录。 请阅读这2个文件,帮我提取出一些共同…...

ES101系列07 | 分布式系统和分页
本篇文章主要讲解 ElasticSearch 中分布式系统的概念,包括节点、分片和并发控制等,同时还会提到分页遍历和深度遍历问题的解决方案。 节点 节点是一个 ElasticSearch 示例 其本质就是一个 Java 进程一个机器上可以运行多个示例但生产环境推荐只运行一个…...

Spring AI Advisor机制
Spring AI Advisors 是 Spring AI 框架中用于拦截和增强 AI 交互的核心组件,其设计灵感类似于 WebFilter,通过链式调用实现对请求和响应的处理5。以下是关键特性与实现细节: 核心功能 1. 请求/响应拦截 通过 AroundAdvisor 接口动态修…...