jjzjj

无人机斜影数据(OSGB)转 Cesium 3dtile 数据归纳总结以及亲测可用示例

非科班Java出身GISer 2023-08-09 原文

无人机斜影数据(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 数据,用来测试环境

首先要确保环境和代码没问题,以下是测试资源以及在线示例

测试资源: 大雁塔场景

在线示例:Cesium 在线加载 3dtile 场景

如果大雁塔场景可以加载,说明环境没问题,则可以进行下一步。

嫌麻烦可以直接下载这个资源,可以直接解压启动访问: Cesium 加载 3dtile 示例


OSGB 数据下载

首先是测试数据的获取,经搜索,发现两个神网站:

  1. 申请数据使用:全国地理信息资源目录服务系统

  1. 直接下载数据: 三维实景模型


推荐使用第二个网站资源,很方便。

已下载数据展示:


OSGB 格式数据


3dtile 数据

此网站可以选择下载 OBJ、3dtile、OSGB 三种格式,其中 3dtile 可以直接使用 Cesium 加载可使用本文提供源码测试),其他格式需要转换才行。

本文主要是对 OSGB 的转换。


OSGB 格式数据转为 3dtile

本来以为,OSGB 格式转 3dtile 应该是非常成熟的技术了,应该很快就可以搞好,结果几乎把所有失败都经历了一遍,直到最后一刻才算是比较完美的解决了。

工具和产品介绍

尝试的工具主要包括:Cesiumlab 2、OSGBLab 2、3dtile.exe、osg2cesiumApp.exe、Converter.exe

简单总结一下(不排除因版本问题导致的偏见),后边有专门试错过程:

  1. Cesiumlab 2 未知原因,转换失败,只生成了 tileset.json

  2. OSGBLab 2 可以转换成功,速度也很快,但是有一些问题:一个是必须设置压缩参数;另外,效果比较差,失真严重

  3. 3dtile.exe,命令行执行,可以转为 3dtile ,但是 Cesium 加载失败

  4. osg2cesiumApp.exe 转换失败,或者转换之后,模型加载显示全白色

    更正一下:osg2cesiumApp.exe 1.3 转换失败;最新版 osg2cesiumApp.exe 1.13 转换成功,加载也正常!

  5. Converter.exe 转换成功,但是坐标系不对,国内 坐标偏移到国外

结论:经测试发现,新版 3dtile.exe 可以完美将 OSGB 格式转 3dtile 格式,而且可以在 Cesium 中正常加载

注意:旧版 3dtile.exe 转换成功的 3dtile 文件,Cesium 加载会报错,而且全网没找到解决办法。
错误信息:RuntimeError: Unsupported glTF Extension: KHR_technique_webgl。

OSGB 文件和元数据配置文件

本文 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,也可以手动创建,只不过最后的坐标可能会偏移!!!

亲测可用工具以及过程

3dtile工具

  1. 准备 3dtile 工具,开源项目,下载地址:3dtile


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


4. 执行命令,生成 3dtile 格式数据

3dtile.exe -f osgb -i  本机OSGB地址\input -o  本机3dtile输出地址\output


5. 将 3dtile 拷贝至 tomcat 中


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

osg2cesiumApp.exe 工具,版本:1.13

  1. 准备 osg2cesiumApp.exe 工具,下载地址:osg2cesiumApp.exe 1.13

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


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

  1. 将 3dtile 拷贝至 tomcat 中

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


试错全过程

  1. Cesiumlab 2 未知原因,转换失败,只生成了 tileset.json。

  1. OSGBLab 2 可以转换成功,速度也很快,但是有一些问题。必须设置压缩参数;另外,效果比较差,可以看以下截图。

返回数据

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

  1. 3dtile.exe(低版本),命令行执行,可以转为 3dtile ,但是 Cesium 加载失败


错误:RuntimeError: Unsupported glTF Extension: KHR_technique_webgl。

经长时间搜索,全网几乎都是同一个答案,亲测无效,建议放弃!!!

  1. osg2cesiumApp.exe 开始转换失败,后来可以转换,但是 全是白色

    注意:osg2cesiumApp.exe 1.13 亲测可以转换成功!

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



总结

关键因素:

  1. 使用 3dtile 工具,且不能使用旧版
  2. 元数据配置文件 metadata.xml 必须有且正确
  3. 命令输入正确:3dtile.exe -f osgb -i 输入路径\test\input -o 输出路径\test\output

干扰因素:

  1. 3dtile 千万不要下载错版本。
    旧版:

    新版:

    当然,也可以直接下载本文提供的工具。

  2. 避开过期博客。很多博客都是 2018年、2019年的,建议搜索的时候选择近一年作为查询条件


在线示例

为了方便查看,文章结尾再加一次在线示例。

在线示例:Cesium 在线加载 3dtile 场景

PS: 下边参考博客,很多过期资源,建议谨慎参考!!!





参考博客:

无人机倾斜摄影建模的五种常见文件格式OSGB
OSGB转Cesium 3DTile并在浏览器中浏览
免费下载倾斜摄影实景三维数据的途径
osgb(倾斜摄影数据)转换为3dtitle工具分享
Cesium加载倾斜摄影数据
Cesium加载gltf报错:RuntimeError: Unsupported glTF Extension: KHR
Cesium 3DTiles转换工具
cesuim加载倾斜摄影OSGB三维数据完整过程(超详细)

有关无人机斜影数据(OSGB)转 Cesium 3dtile 数据归纳总结以及亲测可用示例的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用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. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  3. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用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_

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置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

  7. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在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

  8. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //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

  9. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录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.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  10. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

随机推荐