3DTiles生产流程与规范

news2025/1/18 7:35:50

一篇19年整理的比较老的笔记了。更多精彩内容尽在数字孪生平台。

瓦片切分

标准的四叉树切分对于均匀分布的地理数据切片非常有效,但是这样均等的切分不适用于随机分布、不均匀分布的地理数据,当地理数据稀疏分布的时候,均等的四叉树就不再高效,此时可以考虑用紧凑的包围盒代替均等的包围盒。

紧凑包围盒的四叉树空间结构
此外,对于上述稀疏不均匀分布的地理数据,还可以用KD树的切分方法。KD树的方法需要设置最大深度d。具体切分步骤如下:
(1)选择一个坐标轴,作为本次切分的基础坐标轴,计算所有几何体在该坐标轴上的中心值。
(2)以该中心值为界限将整个区域分为两块子瓦片,同时几何体也分为两组,分别划入子瓦片中。
(3)针对子瓦片重复上述操作,每次切分时旋转一次坐标轴作为新的基础坐标轴,每次切分相当于树结构的深度增加一层,当树的深度大于d时停止切分。

KD树会将区域中的几何体分为两部分,所以这种方法生成的树结构具有较好的均衡性,也就是子瓦片中的几何复杂度都相对均匀。但是因为切分的的子瓦片只有两份,所以会产生相对较深的树结构,不适合大型数据集的切分。
image.png

倾斜摄影或点云建模

image.png
    一切工作的开始是确定采集范围,根据采集范围创建索引并分割采集区域,创建索引得到索引树,分割区域得到瓦片包围盒的经纬度范围,同时根据既定的文件组织结构对保存各区域数据的瓦片文件命名。
    接下来按照采集区域进行采集,在采集过程中,可以一次性采集区域中多个建筑,或者使用设备逐个采集,这样得到的可能是包含多要素或单要素的格网模型。因为三维格网是有环境噪声的,所以需要用去噪方法将其中表示为建筑物的部分提取为要素化的三维模型。如果前面的采集对象为单体建筑物,则需要通过模型合并集中单体模型到一起,即合并成包含多个建筑物要素的模型文件。
    多要素模型向下要得出多个参数:一是根据多要素模型文件中的高度范围补充之前瓦片包围盒缺少的高度信息,二是将多要素模型通过地理坐标转换得到瓦片内数据的包围盒(进一步得到整个瓦片数据的地理坐标),并根据空间一致性检查修正瓦片包围盒,对模型超出的边界进行扩张,进而扩张父节点包围盒边界。三是根据对几何体误差的规定计算当前模型文件的几何体误差。四是将多要素模型转换为gltf格式,根据既定的局部框架,可以将局部矩阵集成到gltf中或者放到瓦片元数据中。
    最后进行数据装配:一是要把多要素gltf结合属性数据组装为瓦片数据文件b3dm,二是把瓦片文件url、包围盒、数据包围盒、几何体误差以及可能作为参数的瓦片地理位置转换的局部框架矩阵组装成瓦片元数据。三是把瓦片元数据与索引树构造为对应的JSON树,用来构建tileset.json文件。最后完成构造3DTiles的所有工作。

地理要素数据集建模

image.png
    首先数据源为地理要素数据集,坐标为WGS84坐标系,然后通过投影转换工具得到投影坐标系下的要素数据集。地理坐标系统下的要素数据集用来构建瓦片索引和分割区域,可以得到索引树、瓦片url、瓦片包围盒、数据包围盒。投影坐标系下的要素数据集用于接下来的要素化建模,在区域分割的同时对投影坐标系下的要素按照区域分组,获得与区域对应的要素组,对每一组要素集计算几何体误差。
    将要素组导入到建模软件中,根据建筑物的高度以及纹理图片进行建模。可以构建多要素的模型或者单要素的模型,若进行单要素建模则需要再进行模型的合并。
    然后将多要素模型通过格式转换成多要素gltf,再将其和要素组中的属性数据一起组装成瓦片文件b3dm。同时,瓦片url、瓦片包围盒、数据包围盒、几何体误差构成瓦片元数据,与索引树一起构成JSON树,并写入tileset.json文件中,最后形成完成的3DTiles。

地理要素数据的3DTiles生产

3.1 下载shp数据,对属性数据进行补齐,增加建筑物高度字段。
3.2 利用ArcGIS对shp数据进行投影变换。
3.3 将整个区域根据LOD准则进行划分(一般选取四叉树分割),选取一些大型或标志性建筑作为根节点,然后根据四叉树分割的四块区域作为根节点的子节点进行存储。这样就相当于生成了5个shp文件,然后进一步得到tileset.json文件。
3.4 将包含部分地理要素的shp文件导入到建模软件中建模。首先将划分后的shp文件导出为CAD文件,然后将CAD文件在3ds MAX中加载。因为加载到3ds MAX中的CAD是以线的形式存储的,所以需要将线转换为可编辑多边形。之后通过编组、平移、解组的方式将所有数据移动到坐标原点附近,这样操作的目的是使瓦片模型数据采用局部空间直角坐标框架。对模型的构建主要使用面的挤出功能,同时使用高清照片进行贴图。建模完成后还要将要素的id编辑到场景下对应的根节点名称中,用于后面的_BATCHID的添加与属性数据的
3.5 接下来是进行b3dm瓦片的转换。首先将3ds Max建模后的模型数据导出成obj文件,然后将obj文件转换成glb文件,再将glb与属性数据根据场景根节点预先记录的id号进行映射,构造b3dm。最后,将b3dm按照tileset.json中的url放置到指定文件位置,至此3DTiles构建完成。

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

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

相关文章

Linux配置腾讯云yum源(保姆级教学)

1. 备份原有的 yum 源配置文件 例如: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 下载腾讯云的 yum 源配置文件 例如: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/…

【1429】招生管理管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 招生管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

共享单车(二):项目日志

stdin, stdout, stderr Linux系统下,当一个用户进程被创建时,与之对应的三个数据流(stdin,stdout和stderr,即三个文件)也会被创建。 stdin,标准输入文件,通常对应着终端的键盘。 s…

Docker网络及CPU资源控制

一、实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容…

JVM常见的垃圾回收器

1、回收方法区: 方法区回收价值很低,主要回收废弃的常量和无用的类。 方法区中的存储: 方法区中存储的是加载的类的信息,常量,静态变量,即时编译后的代码等数据,所以回收的对象也就是这些内…

Qt笔记-解决子控制大小获取不正确(width和height)需要重制窗体后,才能获得正确的值

在Qt中,子控件的宽度和高度在构造后并不准确,而只有在调整窗口大小后才正确,这可能是因为子控件的布局或者约束尚未完全计算和应用。 为了解决这个问题,可以使用QTimer来延迟获取子控件的宽度和高度,以确保在布局和约…

Footprint Analytics 与 GalaChain 达成战略合作

​ Footprint Analytics 宣布与 GalaChain 达成战略合作。GalaChain 是 Gala 旗下的 Layer 1 区块链。此次合作标志着双方在游戏(包括 Gala Games) 、娱乐和金融等多个行业的区块链生态系统革新方面迈出了重要的一步。 GalaChain 致力于满足企业级项目的广泛需求&…

【网安小白成长之路】8.sql注入操作

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭 &…

基于ssm微信小程序的4S店客户管理系统

采用技术 基于ssm微信小程序的4S店客户管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员端 管理员登录 管理员首页 用户管理 门店管理 …

Java技术学习|消息队列|初级RabbitMQ

学习材料声明 黑马RabbitMQ快速入门教程,快速掌握rabbitmq、springAMQP消息中间件 是非常初级的学习,听说后续的高级课程会涉及到微服务之类的,所以等学完微服务再回来学。还有redis的高级部分也涉及了微服务,所以也都暂时停止学…

Pick-a-Pic:An open dataset of user preferences for text-to-image generation

1.introduction 1.创建了一个 数据集,每个示例包括一个提示,两个生成的图像以及一个指向首选图像的标签,或者在没有一个图像明显优于另一个时标记为平局。由真实用户创建,包括50w个示例。 2.利用真实用户偏好,训练一个评分函数,使用人类偏好数据和类似于instructGPT奖励…

我花了2元,15分钟,零基础入门了Llama3的微调。

Llama3在最新测评上已经可以接近闭源的GPT4,我们很快就可以拥有属于自己的“GPT4”了!于是,我昨天第一时间体验了Llama3的微调,成本不高,大概花了2元。 为了方便大家体验微调,我把需要的系统环境打包成了社…

递归、搜索与回溯算法:综合练习

例题一 解法: 算法思路: ⾸先,我们在第⼀⾏放置第⼀个皇后,然后遍历棋盘的第⼆⾏,在可⾏的位置放置第⼆个皇后,然后再遍历第三⾏,在可⾏的位置放置第三个皇后,以此类推&#xff0c…

鸿蒙OpenHarmony【集成三方SDK】 (基于Hi3861开发板)

OpenHarmony致力于打造一套更加开放完善的IoT生态系统,为此OpenHarmony规划了一组目录,用于将各厂商的SDK集成到OpenHarmony中。本文档基于Hi3861开发板,向平台开发者介绍将SDK集成到OpenHarmony的方法。 规划目录结构 三方SDK通常由静态库…

2024年4月最新注册香港苹果账号(Apple ID)并解决支付的教程

大陆的Apple ID仅仅能下载国内的一些APP,其实海外也有非常之多好用又好玩的APP需要大家来挖掘!发现这些海外优质APP就得需要一个海外苹果账号。这就是我今天为什么要写这篇文章的初衷! 注册香港Apple ID教程 1、首先到http://appleid.apple.com里注册一个国内的Ap…

ROS2 命令行工具---常用命令整理

本文主要介绍 ROS2 机器人操作系统的一些常用命令行工具及其使用方法,使用这些命令可以使机器人编程和调试变得更加简便。 在实际应用过程中,我们会经常用到命令行操作来辅助调试,更进一步的可以使用GUI工具辅助调试。 一、创建工作空间 跟…

数据结构——第7章 查找

1 线性表的查找 数据元素和顺序表的定义 typedef struct{KeyType key;InfoType otherinfo; }ElemType; typedef struct{ElemType *R;int length; }SSTable; 1.1 顺序查找 int Search_Seq(SSTable ST,KeyType key){ST.R[0].keykey;for(int iST.length;ST.R[i].key!key;i--);…

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889 创建临时字段 select id , CONCAT(‘内容’) AS fullname from example_table; Pandas数据类型转换_pandas转换数据类型 https://blog.csdn.net/qq_41404557/article/details/125…

用wps自带工具给图片做标注

在wps中,选中wps中的图片,右键选择【编辑】进入图片编辑器,在选项卡面板右侧选择【标注】工具,再选择【添加文本】工具,即可直接在图片上输入文字,标注完成后选择【覆盖原图】就完成标注任务。

【3200字干货】2024跨境电商5大市场:选品风向深度剖析

以下是针对马来西亚、新加坡、泰国、菲律宾和台湾这5个东南亚跨境电商市场的选品市场分析: 一、马来西亚 市场特点:马来西亚是东南亚第三大经济体,拥有年轻的消费群体和对跨境购物的偏好。网购消费力强,易上手爆单,跨…