Cesium入门之十:Cesium加载3DTiles数据

news2025/2/10 8:05:47

目录

  • 3DTiles介绍
  • 3DTiles数据结构
  • Cesium中与3DTiles相关的类
    • 1.Cesium3DTileset类
      • 常用属性:
      • 常用方法:
    • 2.Cesium3DTileStyle类
      • 常用属性:
    • 3.Cesium3DTileContent类
      • 常用属性
      • 常用方法
    • 4. Cesium3DTileFeature类
      • 常用属性
      • 常用方法
    • 5.Cesium3DTile类
      • 常用属性
  • Cesium中加载3DTiles数据的示例

3DTiles介绍

3DTiles是一种面向网格化、可展示的大规模三维空间数据格式,专门为流式传输和渲染海量3D地理空间数据而设计的,用于存储和管理基于网格的三维模型数据。其数据结构基于B3DM和PNTS格式,可以支持多个级别的LOD,并使用Tilesets(瓦片集合)来组织和管理数据。3DTiles具有以下特点:

  • 支持大规模、高精度的三维模型数据展示。
  • 采用标准的json格式描述数据结构和元数据。
  • 使用DRACO和LZMA等压缩算法,提高数据传输和存储效率。
  • 支持多级别的LOD,并支持快速开启、关闭不同级别的数据层。

3DTiles数据结构

在3DTiles中,一个瓦片集(Tileset)是由一组瓦片(Tile)按照空间数据结构(树状结构)组织而成的,它至少包含一个用于描述瓦片集的JSON文件(包含瓦片集的元数据和瓦片对象),其中每一个瓦片对象可以引用下面的其中一种格式,用于渲染瓦片内容:
在这里插入图片描述
b3dm和i3dm格式是基于glTF构建的,它们的瓦片内容在二进制体中嵌入了glTF资源,包含模型的几何和纹理信息;pnts格式则没有嵌入glTF资源。
在3DTiles数据结构,Tileset(瓦片集)是3DTiles的主要管理单元,包括Tileset全局信息、Tileset资源路径、Tileset根Tile等。每个Tileset包含多个Tile,表示不同的数据层级和视野级别,每个Tile内部又包含多个子Tile。最底层的Tile可包含具体的3D模型数据,称为Leaf Tile。

Cesium中与3DTiles相关的类

1.Cesium3DTileset类

Cesium3DTileset类是3DTiles数据的主要管理类,负责加载和渲染Tileset。Cesium3DTileset类允许该3D瓦片集的多个3D瓦片在不同的细节级别之间互相切换,从而实现在不同距离和观察角度下提供适当的细节。该类还提供了一个易于使用的接口来控制3D瓦片集的可见性、样式、位置和旋转等方面,以及管理预加载、缓存和卸载等功能,可用于开发高效、可靠且具有交互性的3D地球应用程序。

常用属性:

  • url:3D瓦片数据的URL地址。
  • modelMatrix:该3D瓦片集的模型矩阵。
  • boundingSphere:3D瓦片集的边界球体(bounding sphere),用于计算和处理可见性和碰撞检测等。
  • root:3D瓦片集的根瓦片(root tile)。
  • ready: 一个Boolean类型的属性,用于指示3D瓦片是否已准备好渲染。

常用方法:

  • destroy():销毁3D瓦片及其内容。
  • getProperty(name):根据属性名称获取3D瓦片的属性值。
  • setProperty(name, value):设置3D瓦片的属性值。
  • hasProperty(name):判断3D瓦片是否包含指定名称的属性。
  • makeStyleDirty():通知3D瓦片集需要重新应用样式。
  • show:设置3D瓦片集的可见性。

2.Cesium3DTileStyle类

Cesium3DTileStyle是用于指定和应用3D瓦片集的样式的类;它可以控制3D瓦片的颜色、点大小、标签风格和文本内容等;它可以对3D瓦片进行分类和着色,以及创建基于属性(如高度、分类或时间)的动态样式。

常用属性:

  • color:3D瓦片的颜色,可以是rgba、rgb或16进制颜色值。
  • pointSize:3D瓦片中点的大小。
  • labelStyle:3D瓦片中的标签的样式。
  • labelText:3D瓦片中标签的文本内容。
  • show:3D瓦片的可见性。
  • style:3D瓦片的所有样式属性。

3.Cesium3DTileContent类

Cesium3DTileContent是用于表示单个3D瓦片的内容和几何信息的类。它可以使用Cesium3DTileContent类来设置和获取3D瓦片中存储的几何和元数据属性,并将其应用于3D瓦片中的3D对象。

常用属性

  • featuresLength:3D瓦片内容中包含的要素数量。
  • pointsLength:3D瓦片内容中包含的点数量。
  • trianglesLength:3D瓦片内容中包含的三角形数量。
  • geometryByteLength:3D瓦片内容的几何数据字节长度。
  • texturesByteLength:3D瓦片内容的纹理数据字节长度。

常用方法

  • hasProperty(batchId,name):检查3D瓦片内容中是否存在具有指定名称的属性值。该方法需要两个参数:
    batchId:要检查属性的要素在批处理表中的索引。
    name:要检查的属性名称。

该方法将返回一个布尔值,指示在批量表的指定批量ID上下文中,是否存在指定属性。

该方法主要用于动态创建和应用3D瓦片样式,使用3D瓦片内容的hasProperty方法可以检查3D瓦片是否具有指定名称的属性,以便选择性地应用样式。例如,可以检查3D瓦片中是否存在“height”属性,然后根据条件对3D瓦片进行分类和着色,或启动特定的动画效果。

  • getFeature(batchId):获取批处理表中指定索引的要素的属性值集合。该方法需要一个参数:
    batchId:要获取属性的要素在批处理表中的索引。

该方法将返回一个包含指定要素的所有属性值的JavaScript对象,这些属性值位于批量表对象中,并且属性的键的名称与其在批量表中的名称相同。

该方法主要用于在Cesium中与3D瓦片交互和操作。除了获取批量表中的属性值之外,还可以使用此方法将元数据附加到要素上,以支持元数据功能。例如,在调用此方法之后,可以将附加的元数据名称和值存储在要素对象中,然后、在应用特定的3D瓦片样式、动态筛选查询或者其他与要素交互的操作中使用这些元数据属性。

注意,如果尝试获取不存在的批处理ID的要素属性,则该方法将返回 undefined。同时,如果要获取的要素具有不完整或错误的属性数据,则该方法可能会返回错误或部分属性数据。

4. Cesium3DTileFeature类

Cesium3DTileFeature类用于表示3D瓦片中的单个要素(feature)及其相关属性。

常用属性

  • color:颜色属性,用于设置3D瓦片要素的颜色。颜色支持RGBA(红/绿/蓝/透明通道)格式,它可以是一个数组,数组的结构为[red, green, blue, alpha],每个值的范围为0到1之间。Cesium3DTileFeature类允许设置颜色以覆盖3D瓦片的默认颜色。
  • featureId:要素ID属性,它是一个任意类型的值,用来定义3D瓦片中的每个要素的唯一标识符。开发人员可以使用这个属性来追踪特定的3D瓦片要素,并在需要时选择性地对其进行操作。
  • polylinePositions:存储要素的线位置的属性(如果存在)。该属性用于3D瓦片中的线型要素,并包含一组数值数组,用于指定该要素的线型样式的位置。每个数值数组都被解释为一个Cartesian3坐标。
  • primitive:与要素相关的图元对象,可以用于检索要素的几何图形信息和进行交互操作。该属性允许开发人员直接访问3D瓦片中的要素及其相关属性数据。
  • tileset:与要素相关的3D瓦片集对象。该属性用于获取要素所在的3D瓦片集对象,以便进行交互操作和操作。

常用方法

  • getProperty(name):获取要素在批量表中的具有指定名称的属性值。
  • setProperty(name, value):设置指定名称的属性值。
  • hasProperty(name):检查要素在批量表中是否具有指定名称的属性。

5.Cesium3DTile类

Cesium3DTile类用于表示3D瓦片数据。

常用属性

  • boundingSphere:一个包含3D瓦片的最小球型边界体。该属性用于裁剪和优化3D瓦片的显示性能。boundingSphere由边界盒计算得到,并可以通过调用update()方法来更新它。
  • children:一个包含所有子瓦片的数组。每个子瓦片都是Cesium3DTile实例。当3D瓦片的内容对象包含多个数组时,它们通常将为每个数组创建子瓦片来管理这些数组。
  • computedTransform:一个包含从父瓦片到当前瓦片的4x4矩阵的数组。该矩阵用于将当前瓦片的内容对象转换为父瓦片的坐标系。computedTransform在更新瓦片转换矩阵时被重新计算。如果瓦片没有父瓦片,则computedTransform为单位矩阵。
  • content:3D瓦片的内容对象,通常包含地理信息和属性数据等相关信息。
  • geometricError:3D瓦片的几何误差,表示3D瓦片的最大距离误差。Cesium使用这个属性来计算3D瓦片的显示优先级和细节层次。
  • extras:一个包含3D瓦片的任意附加数据的对象。Cesium3DTile中的extras属性允许开发人员存储和访问与瓦片相关联的任何额外数据。
  • parent:一个指向父瓦片的指针。父瓦片是当前瓦片的直接上级。如果当前瓦片没有父瓦片,则parent属性将为null。
  • transform:一个从模型坐标系到世界坐标系的4x4矩阵。该矩阵用于将3D瓦片内容对象从模型坐标系转换为世界坐标系。transform矩阵通常在加载3D瓦片时通过调用update()方法计算得到。
  • tileset:与3D瓦片关联的3D瓦片集对象。

Cesium中加载3DTiles数据的示例

 try {
    const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(75343);
    viewer.scene.primitives.add(tileset);
  } catch (error) {
    console.log(`Error loading tileset: ${error}`);
  }
  viewer.scene.globe.depthTestAgainstTerrain = true;

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

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

相关文章

chatgpt赋能python:Python怎么循环

Python怎么循环 循环是编程中最重要的控制结构之一,它允许我们重复执行一组语句,直到满足某个条件为止。在Python中,我们有多种循环结构可供使用,本文将介绍它们及其用法。 for循环 for循环通常用于迭代(遍历&#…

chatgpt赋能python:在Python中用何种方式来建立SEO友好网站?

在Python中用何种方式来建立SEO友好网站? 在当今数字时代,一个强大且易于维护的网站是任何企业或组织成功的关键。但是,一个网站的外观和功能不代表它的成功。如果语义不清、标记不恰当或结构不正确,网络爬虫可能会忽略您的网站&…

51单片机“密码锁”代码详解

注:此代码一经过验证,读者不必怀疑其正确性,如果烧录进去没有反应,请自行检查引脚端口配置,以及仔细分析代码实现原理。倘若能静下心来分析代码,一定能受益匪浅。 废话不多说,,直接…

深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理

文章目录 了解日志框架常见日志框架面向 SLF4J 编程SLF4J 接口规范其他框架统一转换为 SLF4J 框架 了解日志框架 日志框架的历史可以追溯到计算机编程的早期。在早期的编程语言中,如 C 和 Pascal,程序员通常使用 printf 或 fprintf 函数将程序的状态信息…

总结898

今天在B站上看英文短视频,认识了一位著名的心理学家乔丹彼得森(号称“龙虾教授”)。他的思想对我 产生了一定的影响。 曾在《写作:自我精进的武器》中看到过写作的5大好处,但他没有乔丹彼得森所讲的那么令我震撼,他对写…

Django框架-1

框架介绍 框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法; 框架是可被应用开发者定制的应用骨架,是某种半成品; 使用框架开发的好处 开发周期短维护成本低软件生产效率和质量得到提高 Django框…

面向对象、封装、就近原则及this关键字

面向:拿、找; 对象:能干活的东西; 面向对象编程:拿东西过来做对应的事; 即,分别找对应的“对象”完成对应的“事件”。因此学习内容包括: ①学习各种已存在的对象并使用; ②学习设计对象并使用。 面向对象…

DAY21:二叉树(十一)二叉搜索树中的搜索+验证二叉搜索树(坑比较多,复盘)

文章目录 700.二叉搜索树中的搜索二叉搜索树概念二叉搜索树的搜索方式补充总结 思路递归法迭代法注意这里写if-if和if-else if的区别为什么if-if会访问空的root?if-if结构和if-else if-else的区别 迭代法修改结果: 98.验证二叉搜索树(坑比较多…

Java小知识

一、lambda ()->{} ()中为接口唯一方法中的参数,可以任意取 {}为接口唯一方法中的执行语句,返回的结果类型必须符合接口中方法返回值的定义 原理理解: Public interface Printable{ String print(String suffix);} 在函数式编程中有一个方…

【哈佛积极心理学笔记】第6讲 乐观主义

第6讲 乐观主义 How can we create consciously and subconsciously a positive environment, where we actually can take out the most moral, the most successful self to appreciate that self. Create a powerful positive situation to bring out the best in people.…

STM32——08-STM32感应开关盖垃圾桶

项目二:感应开关盖垃圾桶 项目需求 检测靠近时,垃圾桶自动开盖并伴随滴一声, 2 秒后关盖 发生震动时,垃圾桶自动开盖并伴随滴一声, 2 秒后关盖 按下按键时,垃圾桶自动开盖并伴随滴一声, 2 秒后…

DAY19:二叉树(九)路径总和+已知中后序构造二叉树

文章目录 112.路径总和思路伪代码完整版写法1写法1必须分开两个函数的原因注意点 完整版写法2写法2不涉及到回溯的原因 106.中序和后序遍历构造二叉树思路伪代码后序数组如何切割出左右区间写法注意区间切割注意中序和前序如何唯一构造二叉树后序和前序能否唯一构造二叉树&…

03-踏入程序诗意:Golang 流程控制的优雅律动

📃个人主页:个人主页 🔥系列专栏:Golang基础 💬Go(又称Golang)是由Google开发的开源编程语言。它结合了静态类型的安全性和动态语言的灵活性,拥有高效的并发编程能力和简洁的语法。G…

Linux 安装Docker完整教程(六)

文章目录 背景一、Docker简介二、docker desktop 和 docker engin 区别三、Linux 安装Docker1. 安装docker的前置条件:2. 查看Docker版本3. 检查是否安装过Docker4. Docker的自动化安装 (不想自带化安装的可跳过本步骤,选择手动安装)5. Docker手动安装&a…

第二章CompletableFuture

文章目录 Future和Callable接口FutureTask实现类为什么引出FutureTask Future到CompletableFutureFuture优点Future的缺点get()阻塞isDone()轮询Future应用现状 CompletableFuture基本介绍CompletionStage核心的四个静态方法(分为两组)runAsync无返回值s…

数字人解决方案——实时对话数字人源码与环境配置

前言 1.从技术角度来看,现在的数学人就是一个缝合怪,把各种技术点都整合在一起,用来实现直播、对话等数字人。技术流程大概如下图: 其实最重要的一环应该属于LLM(大型语言模型),LLM相当于一个人的意识,如果…

外卖订单管理系统(Javaweb+Mysql)

程序源码 可以通过上方代码包.rar文件下载,也可以在下方链接下载 链接: https://pan.baidu.com/s/1OruBEcEK70DtUbvA8UIE-w?pwddkdg (数据库sql文件在项目根目录下data -> sql) 设计报告 【金山文档】 外卖订单管理系统设计报告 http…

编译原理期末速成–正规式、NFA转DFA、DFA的简化

编译原理期末速成–正规式、NFA转DFA、DFA的简化 文章目录 编译原理期末速成--正规式、NFA转DFA、DFA的简化什么是DFA、NFA?看个题消化一下步骤一:步骤二:步骤三:步骤四:步骤五:步骤六:步骤七&a…

POJ The Game

原题目:传送锚点 1.题目 The Game Description A game of Renju is played on a 19*19 board by two players. One player uses black stones and the other uses white stones. The game begins in an empty board and two players alternate in placing black …

面对工作中的失误:从错误中学习与成长

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…