基于Cesium的实景三维模型动态更新-以3Dtiles为例
Posted lwx2233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Cesium的实景三维模型动态更新-以3Dtiles为例相关的知识,希望对你有一定的参考价值。
基于Cesium的实景三维模型动态更新-以3Dtiles为例(一)_lwx2233的博客-CSDN博客
在上一节中,我们了解了实景三维模型动态更新的本质,这一节我们来讲讲三维模型更新的技术路线
有两条,其中一条很抱歉我没有走通,但我也会将我当时的想法写出来。
一.原数据更新法(失败的way)
1.如果我们想要更新一样东西的话,无疑从最原始的地方开始入手——osgb或者3Dtiles
一开始的想法是文件直接替换,但是显然行不通,先来看看osgb的文件格式:
在Data文件夹中,存放有瓦片文件夹,就是我们所熟知的tile,它是以行列号来读取与排序的
每个瓦片文件夹中又存放有不同层级的osgb文件
L后面的数字就代表着层级,如果我们要替换的话,势必是整个文件去替换
那么问题来了,每个无人机架次飞出来的倾斜模型,无法保证在同区域模型的行列号一致
也就是说,在新模型中,相对应的行列号瓦片不一定和旧模型的位于同区域
所以不能对osgb进行替换。
2.回过头我们来看看3dtiles,先看文件格式:
Cesium展现3dtiles是通过读取文件夹中的tileset.json这个文件,下面是它的内容:
3Dtiles是通过不断的读取children来加载瓦片,在children中的uri,对应了文件夹中不同层级的瓦片,也就是我们熟知的b3dm
所以如果我们对3Dtiles的各个瓦片文件夹进行替换,也同样会遇到像osgb一样的问题
总结来说,从文件直接替换来对实景三维模型进行更新,是不可行的,无法保证同行列号同区域
二.表面更新法(成功的way)
既然在原数据上动手脚不可行,那只能在读取加载完毕后进行替换
这个原理就比较简单了,我们只需要先加载旧模型,然后将旧模型需要更新的地方进行挖空处理,再将同位置上的新模型放上去,这样就做到了实景三维模型的动态更新。
0.前期准备
利用倾斜摄影三维建模技术所获得的实景三维更新模型,其范围较实际更新区域更大。为了减少服务器加载三维模型的时间,本研究通过对实景三维模型裁剪的方式,减少三维模型加载时对服务器的负载,同时也方便前端对更新模型区域的获取,技术路线如下:
0.1 实景三维更新区域的确定
利用二三位一体化平台,获取实景三维更新模型的范围(通常为矩形),将其填入相对应字段的点要素表格中,以经纬度的方式来记录,字段名如下:
Id | x | y |
1 | 23.13030037 | 113.6574888 |
2 | 23.12670869 | 113.6574887 |
3 | 23.12670869 | 113.6536053 |
4 | 23.13030037 | 113.653605 |
0.2生成裁剪面要素
使用Arcgis软件,将点要素表格加载,通过“数据管理工具”中的“点集转线”工具,先将点要素表格转换为线要素,再通过“要素转面”工具,生成实景三维更新模型所需要的裁剪范围面要素。
(这里你需要注意他的空间参考!!!!)
0.3裁剪实景三维模型
将裁剪面要素导出为shapefile格式,并使用supermap软件中打开,通过“生成倾斜摄影配置文件”功能来加载实景三维模型,源路径为模型的Data文件夹,而元数据则是Data文件夹同目录下的metadata.xml文件。
在“工作空间”的“场景”中,选择新建球面场景,该球体类似于Cesium的三维球体,通过该球体将实景三维模型展现在上面。
在图层中添加生成的倾斜摄影配置文件,三维模型便会呈现在三维球体上。同时将裁剪面要素加载在图层中,将实景三维更新模型与裁剪面要素叠加展示(由于裁剪面要素不存在高度这一属性,所以会被具有高度的实景三维模型所覆盖)。
在同一空间参考下,同时加载裁剪面要素与实景三维模型,通过“三维地理设计——倾斜摄影操作——裁剪”,选择“裁剪多边形”为裁剪面要素polygon,便可以将所需要的三维模型裁剪出来,输出为osgb格式。
好,这样子我们就获得了我们想要的更新区域的实景三维模型(osgb格式)
接下来我们需要将其转换为cesium可以读取的3dtiles格式,敬请期待下一期,如果对流程有什么不懂的地方,欢迎与我交流,谢谢!
以上是关于基于Cesium的实景三维模型动态更新-以3Dtiles为例的主要内容,如果未能解决你的问题,请参考以下文章
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例
基于Cesium的实景三维模型动态更新-以3Dtiles为例