Cesium实验室

CesiumLab V2.2.0 - 点云数据处理

2020-03-17  本文已影响0人  Cesium实验室

点云工具应该是 Lab工具集比较早期就有的一个产品,应该是我研究3dtiles的第一个工具。点云由于容易分割,容易精简,所以用来练手3dtiles最为合适不过。不过即便如此,要把点云工具做“ 好”,依然不是一个非常容易的事情,这是我的c++代码项目:


点云代码

迄今位置,点云已经是三个版本的代码了。第一个版本纯属测试,可以输出3dtiles,但是效率不高。第二个版本就是大家在Lab 2.2之前使用的点云工具版本,基本可用,但是不方便,不高效。第二版本的使用时间从2018年4月到今天,近乎两年,也是该更新一下了。
我们先看下新版的界面

2.2版本的点云处理界面

改变最明显的就是 属性字段可以选择,而不是用户去输入。我们还是列表说明下点云升级前后的差异:

点云处理对比

逐条解释下:
1,IO库的更换,pdal是一个功能强大的库,但是也是一个繁琐低效的库,而且是个编译很困难依赖又多的库(至少2018年的时候是这样,新版本应该又改进),它底层也是用liblas去解析点云数据。因为我们目前只需要读取las,所以没必要使用庞大pdal库去操作,所以放弃该库。放弃它也就是带来的缺陷就是目前只支持las(主要还是需求推动的,我们碰到客户,90%以上都是las格式,我们新版代码有良好的可扩展性,稍作修改即可支持其他格式)。
2,支持的文件个数,我们碰到客户会依据自己的规则去把点云分成若干文件(比如类型或者范围),但是最终我们在展示的时候,如果一个文件对应一个3dtiles,必然是效率低下的,所以我们需要能够把多个点云融合到一起,所以在V3版本我们是支持一次性处理多个文件的。
3,八叉树的分割,由于V3版本需要考虑多文件的问题,以及增量更新的问题,所以我们八叉树的分割选择非常重要。我们在V3版本设计了一种全球的分块方式,也就是每个块都会有全球编码,这样无论多大范围的点云数据,我们都能够融合在一起。为了支持这个需求,其实内部处理(分割,精简)逻辑要比以前复杂许多,幸好我们实现了。
4,缓存 Lab2.2.0的点云界面增加了一个缓存选项,这个是增量处理的关键因素,如果配置了缓存,我们会把点云进行分块处理,并且把每块数据存储到中间格式,这样既可以支持大的las文件(比如上G,甚至更大的),也可以支持增量更新。 如果不配置该选项,那么一切处理都是在内存完成,处理速度更快,但是支持的数据量会受限你的处理机器的内存(注意看我们界面红色字提醒)。
5,存储形式,大家现在使用Lab2.2.0的时候就会发现,我们的绝大部分3dtiles工具都具有一个输出选项,紧凑或者散列(因为这个版本我们耗费大量时间把底层的输出库统一了)。虽然我们群里说了很多次,然后我还是要再说:
散列:是指本地的硬盘文件,这种文件组织方式最简单直观,而且部署静态服务很容易。
紧凑:是指把这些文件当作二进制记录的方式存储到sqlite文件里(我们目前定义的后缀叫 clt -- cesiumlab tiles)。这种方式不直观,而且需要动态服务支持,但是它的优势是对于大量散列切片能够加速存储和迁移。

clt文件-sqlite表
其实因为我们统一了工具的输出存储库,我们内部还支持把切片存储到mongodb服务器,稍作扩展我们可以把切片存储到任意数据库库、大数据存储、云存储等。
6,属性,当我们发现很多人都在问点云如何做高度着色的问题,当然解决这个问题,实际是可以通过写shader实现的,但是我估计大部分用户这个能力有限,而且写shader之后实现的效果仅仅是可视化,不利于未来的的一些测量分析。所以我们在这版本的除了las本身自带的属性之外,增加了"x","y","z" 三个自定义属性,这三个属性实际表示输入的的原始坐标,"z"就表示了高度,所以,如果要做z着色,我们处理的时候,把z指存储下来:
保存z值
处理完成之后,设置3dtiles的样式:
点云高程着色
注意这里的 /200 是根据这个测试数据随便写的,只是举个栗子,抛砖引玉,大家完全可以根据自己的数据来编写这个样式。

点云V3我们就说到这里,再次重复下我们的“口号”:我不能保证它能解决所有人的问题,只要能解决一部分,那就是有意义的。如果有问题,来实验室群里找我们:


Cesium实验室--国内最大的Cesium开发者社区

https://bbs.cesiumlab.com/

上一篇 下一篇

猜你喜欢

热点阅读