无人机斜影数据(OSGB)转 Cesium 3dtile 数据归纳总结以及亲测可用示例
公司平台需要展示离线 3dtile 数据,之前一直使用在线资源,后来尝试加载本地发布的 3dtile 数据也没问题。
考虑到以后实际中应用,一般为无人机拍摄的 斜影数据,基本都是 OSGB、OBJ 等类型,而公司平台使用 Cesium 来加载 3dtile 数据,目前 Cesium 还不支持 OSGB、OBJ 等数据,因此需要将数据转为 3dtile 格式。
经过几乎一天的尝试,走了众多弯路 (PS:CSDN 真是互相抄啊),终于搞定,这里记录一下过程问题,以及最终解决方案,为类似需求的广大 GISer 节约时间。
本文内容包括:运行环境、Cesium 加载 3dtile 数据、OSGB 数据下载、OSGB 格式转为 3dtile、试过全过程。
操作系统:windows 10
Cesium版本:1.96
浏览器:谷歌
Tomcat:8.5
Java:1.8
首先要确保环境和代码没问题,以下是测试资源以及在线示例:
测试资源: 大雁塔场景
如果大雁塔场景可以加载,说明环境没问题,则可以进行下一步。
嫌麻烦可以直接下载这个资源,可以直接解压启动访问: Cesium 加载 3dtile 示例
首先是测试数据的获取,经搜索,发现两个神网站:


推荐使用第二个网站资源,很方便。
已下载数据展示:

OSGB 格式数据

3dtile 数据

此网站可以选择下载 OBJ、3dtile、OSGB 三种格式,其中 3dtile 可以直接使用 Cesium 加载(可使用本文提供源码测试),其他格式需要转换才行。
本文主要是对 OSGB 的转换。
本来以为,OSGB 格式转 3dtile 应该是非常成熟的技术了,应该很快就可以搞好,结果几乎把所有失败都经历了一遍,直到最后一刻才算是比较完美的解决了。
尝试的工具主要包括:Cesiumlab 2、OSGBLab 2、3dtile.exe、osg2cesiumApp.exe、Converter.exe
简单总结一下(不排除因版本问题导致的偏见),后边有专门试错过程:
Cesiumlab 2 未知原因,转换失败,只生成了 tileset.json。
OSGBLab 2 可以转换成功,速度也很快,但是有一些问题:一个是必须设置压缩参数;另外,效果比较差,失真严重。
3dtile.exe,命令行执行,可以转为 3dtile ,但是 Cesium 加载失败。
osg2cesiumApp.exe 转换失败,或者转换之后,模型加载显示全白色。
更正一下:osg2cesiumApp.exe 1.3 转换失败;最新版 osg2cesiumApp.exe 1.13 转换成功,加载也正常!
Converter.exe 转换成功,但是坐标系不对,国内 坐标偏移到国外。
结论:经测试发现,新版 3dtile.exe 可以完美将 OSGB 格式转 3dtile 格式,而且可以在 Cesium 中正常加载。
注意:旧版 3dtile.exe 转换成功的 3dtile 文件,Cesium 加载会报错,而且全网没找到解决办法。
错误信息:RuntimeError: Unsupported glTF Extension: KHR_technique_webgl。
本文 OSGB 文件结构:


必备元数据配置文件:metadata.xml

<?xml version="1.0" encoding="utf-8"?>
<ModelMetadata version="1">
<!--Spatial Reference System-->
<SRS>EPSG:2326</SRS>
<!--Origin in Spatial Reference System-->
<SRSOrigin>835786,820849,0</SRSOrigin>
<Texture>
<ColorSource>Visible</ColorSource>
</Texture>
</ModelMetadata>
注意: metadata.xml 一般是跟 OSGB 一起生成的,如果没有,可以在获取 OSGB 数据的地方寻找一下。
笔者当时废了半天劲,自己创建元数据配置文件,后来还出现各种问题,最后发现,原来在 OSGB 资源网站可以下载:

PS:如果实在没有 metadata.xml,也可以手动创建,只不过最后的坐标可能会偏移!!!

2. 准备 OSGB 数据,按照上文目录结构

4. 执行命令,生成 3dtile 格式数据
3dtile.exe -f osgb -i 本机OSGB地址\input -o 本机3dtile输出地址\output


5. 将 3dtile 拷贝至 tomcat 中

6. 运行 tomcat(cesium页面和3dtile需要在同一个tomcat下,否则会跨域),查看效果



4. 启动程序,选择路径,配置参数,生成 3dtile 格式数据





返回数据

加载效果,失真比较严重:



错误:RuntimeError: Unsupported glTF Extension: KHR_technique_webgl。
经长时间搜索,全网几乎都是同一个答案,亲测无效,建议放弃!!!

osg2cesiumApp.exe 开始转换失败,后来可以转换,但是 全是白色。
注意:osg2cesiumApp.exe 1.13 亲测可以转换成功!


Converter.exe 可以转换,坐标系偏移很大,此时坐标在香港,但是实际坐标在北极圈附近。


关键因素:
干扰因素:
3dtile 千万不要下载错版本。
旧版:

新版:

当然,也可以直接下载本文提供的工具。
避开过期博客。很多博客都是 2018年、2019年的,建议搜索的时候选择近一年作为查询条件。
为了方便查看,文章结尾再加一次在线示例。
PS: 下边参考博客,很多过期资源,建议谨慎参考!!!
参考博客:
无人机倾斜摄影建模的五种常见文件格式OSGB
OSGB转Cesium 3DTile并在浏览器中浏览
免费下载倾斜摄影实景三维数据的途径
osgb(倾斜摄影数据)转换为3dtitle工具分享
Cesium加载倾斜摄影数据
Cesium加载gltf报错:RuntimeError: Unsupported glTF Extension: KHR
Cesium 3DTiles转换工具
cesuim加载倾斜摄影OSGB三维数据完整过程(超详细)
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手