CesiumLab V1.2 新功能 倾斜数据处理
一转眼又是一周的时间,我们的实验室功能又强大了。
照旧我们先放毒,放图,图,太晚了,字都敲不到一起了



简单介绍一下 CesiumLab 的 Osgb倾斜数据转3dtiles:
1,倾斜模型的精确匹配
CesiumLab 支持投影信息的自动读取 以及 界面输入
自动读取:如果当前输入路径,例如 C:\data\dayanta 那么会自动尝试 读取 C:\data\metadata.xml,从此文件中提取投影和中心点
界面输入:对于一些非contextcapture导出的osg,可能就没有这个metadata.xml,那么我们可以在界面上手动选择一个投影或者一个站心坐标系位置。
这里其实我有一点点的疑惑,比如如果metadata.xml里是utm50N的投影,并且有个srsorigin
模型的顶点坐标 + srsorigin 是 utm50N投影下的坐标值吗?
或者 模型的顶点坐标 仅仅是 srsorigin 和 utm50N 构造的站心坐标系下的 相对坐标 ?
我现在是前者来处理的。
对于小范围场景,几公里范围内,这个误差很小,我大概算了算,1公里误差在7厘米左右
对于大范围场景,这个还是需要搞清楚,希望懂的人给解惑一下。

2, 倾斜模型的单体化
单体化,我的个人理解就是把倾斜模型按属性分割,3dtiles的batchid属性是绑定在每个顶点之上的,所以我们的单体化是基于顶点来做的,简单来说,就是判定每个顶点属于哪个属性面,然后通过batchid去赋予它属性。
当然这块我稍微做了一下扩展,对垂直方向也进行了判定。
拿我上传到qq群(595512567)文件的示例数据,大雁塔来说,其实在shp文件同一个位置,有8个面feature(基座到第七层各一个),每个feature的最大最小高度是不同的。倾斜模型中每个顶点逐个判断,属于那个高度范围,那么就绑定哪一层的属性。

当然在如果处理的时候没有设置最小高度字段和最大高度字段,那么顶点会忽略高度因素,完全按照多边形范围判定。
其它更新
1,dataserver 默认支持sqlite
虽然我很喜欢mongodb,但是为了非专业玩家考虑,我不得不忍痛割爱,大家再也不为mongodb安装所折磨了。具体看使用文档吧。
2,首页增加了码农工具

我会逐步把我开发或者数据调试处理过程中用到的一些小公举放到这个模块下,这个模块只是为了调试方便,可能会有很多使用问题,大家选择使用吧 。
模型查看器:用threeejs做的一个模型浏览工具,threejs的各种模型解析应该都是社区贡献的,所以统一性并不是太好,我目前只是堆了gltf,dae,obj,ply等模型的代码进去,但是实在没精力去修正其中的各种问题,目前只能说gltf2.0的模型还是可以的,其它的模型还是不要尝试了,等我逐渐丰富把。
模型转换器: 前两天看有人在问osgb转gltf,反正在osgb转3dtiles的工具里,这个功能就是个顺手的事情,所以就把它给放出来了。计划这块以后引入assimp去支持更多的模型格式转换。

矢量转换器: 这个先挖一个小坑,等我有空就用ogr去填上
码农干货:
1, osgb文件的解析
这个直接用的osg的库,顺便说一下,osg库的数学函数(vec 和 matrix)非常棒,只要是图形学相关的东西,这套数学库非常实用。
2,有人问我geometricError怎么计算的
这个直译过来就是几何误差,也就是粗精度模型相对原始模型的几何偏差,单位是米,也就是数据分级(lod)的关键指标。
首先一原则,无论我们的3dtiles怎么计算,3dtiles的叶子节点(无children)的geometricError = 0,因为这就是表示原始模型,当然是无误差的。
说一下我是怎么计算的。
对于点云处理: 点云数据分级(lod)的关键是数据抽稀,我采用的算法是体素抽稀,说简单点,就类似二维图片的像素分辨率,抽稀阈值是 体素密度 N个/米 ,所以目前,我直接直接认定 非叶子节点的 点云块 geometricError = 1 / N 米
对于建筑物矢量面处理: 建筑物矢量面数据分级的关键是数据筛选,对于每个块,我们设定一个建筑物大小筛选阈值,也是直接拿则个阈值当 geometricError
对于osgb数据:osgb由于自带lod,osgb的lod用像素投影大小来定义的,核心问题就是把这个像素大小转为 geometricError,这块先卖个关子,等下次再说。
从上述的处理看出来了吧,其实我的处理方法没什么高深的,把很多问题简化了,绝对没有什么太深的理论算法计算,目前能用就行了,随着以后加深理解再说吧。
3,有人问我说osgb转gltf出不来什么原因
这个原因真的太多了:顶点不正确,包围盒不正确,矩阵偏移不正确都可能导致。
有些人说转出来的gltf是黑色的,这个一般是法向量的问题导致的。
我也是被这些看不见,黑色的问题各种折磨,不过还好我有cesiumlab的3dtiles预览工具,它具有定位,包围盒,位置中心等一键式功能,极大的方便了我的开发,也希望能帮到各位在做osgb转3dtiles工具的码农。
再吐槽一下gltf里的默认材质pbrMetallicRoughness,这个材质计算真是有点难调,怎么调颜色都不亮。我把cesium生成的shader截取出来了,竟然快一百行。几个关键的值:baseColorFactor基础颜色,我现在设定的白色。roughnessFactor 粗糙度我的理解是调整散射颜色的强度,metallicFactor我理解调整的反射颜色的强度。我来回对比了好多组合都没有太好的,下一步打算要么尝试看有没有禁用光照的方法,要么就自己写shader了,对于倾斜来,颜色本来就是照片生成的,已经带了光照信息,最简单的纹理采样就是原汁原味,不应该在shader来回再算光照。如果有简单的禁用光照的方法,望大家告知。
4,这回又被小bug折磨了三小时
最开始保存b3dm大致是这么写的
ofstream of("c:\1.b3dm");
of.write()....
of.close
文件正常生成了,可是在cesium中死活就是解析失败,经过跟代码发现buffer长度不对。
最后c++里调试,发现 write一个2000长度的数组,文件长度竟然是 2010多,见了鬼了。
c++高手估计该嘲笑我了,呵呵,我就不卖关子了,直接说原因:
ofstream默认的打开方式是文本,对于文本的话存入的数据系统会经过编码处理,这样有些字符占用的位置就多了。
因为b3dm是二进制解析,所以我们必须二进制打开文件,如下:
ofstream of("c:\1.b3dm", ios::binary); 这样就问题搞定。
其实这个问题我还是挺注意的,只是由于代码架构需要,打开文件和写文件并不在一个cpp里,容易被忽略。
一些测试数据:
https://pan.baidu.com/s/1aYWXZntVGx2-MZjiQVqzOg
后记:
终于终于把我前面挖的几个大坑(建筑物矢量面处理,osgb倾斜模型处理)都填上了。现在我又给自己挖了一个巨大的坑,Bim(ifc)数据转3dtiles,这个坑我现在还没底,不知道什么时候才填的上,大家等着吧。
另外我看到太多的同学因为max模型转换而苦恼,这个我原本是打算写max脚本的,但问题是这个脚本没办法集成到cesiumlab中,很难形成一个统一化的产品,所以我也在犹豫。如果有max模型转换的问题,可以私聊。
Cesiumlab是一款专为Cesium开源数字地球平台打造的免费数据处理工具集。目前包含地形数据处理、影像数据处理、点云数据处理、数据下载、建筑物矢量面处理等几大工具。同时提供一套java开发的数据服务器。形成从数据处理、服务发布、到代码集成的完整工具链。希望它能帮到您,欢迎反馈交流。

CesiumLab V1.2 新功能 倾斜数据处理的更多相关文章
- CesiumLab V1.4 新功能 BIM数据处理
我也没想到,BIM数据处理一下拖了这么久才有个交代.我们照例先放图 Revit官方的示例数据 隐藏屋顶+俯视 曾经因为太大而无法导出无法处理的医院模型 室内装修方案模型 最近和很多做b ...
- CesiumLab V1.1 新功能 (免费Cesium处理工具集)
Cesiumlab 自从上周(3月20日)发布之后,赢得小伙伴一致好评. 本周继续推出重大更新: 建筑物矢量数据 转 3dtiles, 建筑物矢量数据 转 3dtiles, 建筑物矢量数据 转 3 ...
- CesiumLab V1.3 新功能 MAX场景处理(免费Cesium处理工具集)
每次到写文章的时候就很高兴,意味着又有重大功能更新了,也意味着10多天昏天黑地的闭关日子暂时结束了. 依照惯例,先放图 小范围精模型cesium加载效果 大范围白模cesium加载效果 ...
- 直播预告 | 猪齿鱼V1.1发布,线上新功能详解邀您参加
2021年11月11日,数智化效能平台猪齿鱼 Choerodon发布 V1.1版本,多项功能新增或优化,多管齐下,全面提升团队工作效能! 通过提供体系化方法论和协作.测试.DevOps及容器工具,猪齿 ...
- OpenStack Q版本新功能以及各核心组件功能对比
OpenStack Q版本已经发布了一段时间了.今天, 小编来总结一下OpenStack Q版本核心组件的各项主要新功能, 再来汇总一下最近2年来OpenStack N.O.P.Q各版本核心组件的主要 ...
- HTML5基本特性和新功能
HTML5的基本特征 1.向前兼容性 核心理念——平滑过渡! 不支持html5的浏览器可以向前兼容,并不会影响web内容的显示! 2.跨平台运行性 从pc浏览器到手机.平板电脑,甚至是智能电视. 只要 ...
- JPA2.1 中三个提升应用性能的新功能
经常在网上看到开发者们抱怨 JPA 性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个: 使用过多的 SQL 查询从数据库中获取所需的实体信息,即我们常说的n ...
- CloudStack 4.2 新功能:集成SNMP进行系统监控(原理篇)
作者微博:http://weibo.com/tianchunfeng CloudStack 4.2 版本发布在即,相信不久后对 4.2 版本新功能(共有13个)的介绍会逐渐多起来.因为无论是从架构底层 ...
- [译] OpenStack Pike 版本中的 53 个新功能盘点
原文:https://www.mirantis.com/blog/53-things-to-look-for-in-openstack-pike/ 作者:Mirantis Nick Chase 发 ...
随机推荐
- Oracle Database 18c数据库安装步骤
1.Oracle官网登录下载https://login.oracle.com/mysso/signon.jsp WINDOWS.X64_180000_db_home.zip 2.D盘根目录新建文件夹: ...
- RabbitMQ 五种工作模式
官网介绍:https://www.rabbitmq.com/getstarted.html 五种工作模式的主要特点 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获 ...
- laravel框架中使用QueryList插件采集数据
laravel框架中使用queryList 采集数据 采集数据对我们来说真家常便饭,那么苦苦的写正则采集那么一点点东西,花费了自己大把的时间和精力而且没有一点技术含量,这个时候就是使用我们的好搭档Qu ...
- 深入浅出 Java Concurrency (37): 并发总结 part 1 死锁与活跃度[转]
死锁与活跃度 前面谈了很多并发的特性和工具,但是大部分都是和锁有关的.我们使用锁来保证线程安全,但是这也会引起一些问题. 锁顺序死锁(lock-ordering deadlock):多个线程试图通 ...
- shell 的基本理解
shell 事先通过一个变量设定好了多个路径,当用户输入命令时,shell会自动到这些路径(由左向右)以此查找 与命令名称相同的可执行文件 hash 用来保存以前曾经执行过的命令,以哈希表的方式保存, ...
- 2016 CCPC网络选拔赛 部分题解
HDU 5832 - A water problem 题意:有两颗星球,一年的长度分别为37天和173天.问第n天时它们是否为新年的第一天. 思路:显然 n 同时被37和173整除时,两种历法都在新 ...
- Tree and Permutation (HDU 6446) 题解
// 昨天打了一场网络赛,表现特别不好,当然题目难度确实影响了发挥,但还是说明自己太菜了,以后还要多多刷题. 2018 CCPC 网络赛 I - Tree and Permutation 简单说明一下 ...
- Java MySQL 批量查询数据,每次查询10条
因为 数据量比较多, 比如每次 /** * 批量查询 * @param sourList * @param batchCount * @param userMapper * @return */ pu ...
- 【51nod 1355】 斐波那契数的最小公倍数
题目 51nod的数学题都还不错啊 首先直接算显然是没有办法算的,因为\(fib\)的lcm这个东西还是太鬼畜了 我们考虑到\(fib\)数列的一个非常好的性质是\(gcd(fib_i,fib_{j} ...
- Appscan standard怎么设置外部浏览器为IE
Appscan standard怎么设置外部浏览器为IE 方法/步骤 首先,打开一个的Appscan 的界面中,点击菜单中的 工具 的选项 点击了工具的选项之后,弹出了下拉菜单选中为 ...