OSGB是国际通用三维场景格式,倾斜摄影数据大部分都是这个格式,而Easyv的倾斜摄影组件暂不能直接支持OSGB格式的数据,需要转换成3D Tiles。关于OSGB格式的概念和特点,请参阅其他相关资料,这里主要聚焦的是OSGB格式的转换。
OSGB数据是一个文件夹,其中根目录下有一个“metadata.xml”文件和一个“Data”的文件夹。
“Data”文件夹里是各个层级的模型数据,每层数据在一个文件夹中,文件夹名称一般是如下所示的格式:
随便进入一个层级数据的文件夹中,可以看到都是.osgb后缀的文件,如下图所示:
如果一个倾斜摄影的数据有上面3个特征,基本就能判断这是一个OSGB格式的数据,识别出相应的目录结构可以方便我们进行后面的格式转换。
3D Tiles是Easyv组件当前唯一支持的倾斜摄影数据格式,如果手上有的是其他格式倾斜摄影数据(如OSGB),需要转换成3D Tiles。
如果有兴趣,可以阅读一下3D Tiles的官方文档,其中有3D Tiles格式的定义和基本概念,这样更容易理解这篇文章的内容。3D Tiles格式的官方文档:https://github.com/CesiumGS/3d-tiles
3D Tiles格式的倾斜摄影数据也是一个文件夹,进入其根目录后,可以看到有很多个文件夹以及一个.json格式的文件,如下所示:
这个json格式的文件就是Easyv的倾斜摄影组件需要的,它的名字一般是tileset.json,但也可能是其他的名字,这个名字没有严格的规定。但这个目录下有且只有一个.json文件,所以一般只要看到了一个.json文件,基本上就可以判断它就是我们需要的tileset.json文件。
随便进入一个名如“Tile_+006_+008”这种格式的文件夹,可以看到里面也有一个tileset.json文件,这个是子级的tileset.json文件。Easyv组件里并不需要这些子级的tileset.json文件,只需要根目录下的那个tileset.json文件。
除了tileset.json之外还可以看到一些别的.json文件和b3dm文件。如果看到了b3dm文件,可以断定这个数据是一个1.0版本的3D Tiles数据。
3D Tiles已经发布了1.1版本,它和1.0版本的一个区别就是:1.1版本模型采用的是gltf/glb格式,1.0版本模型采用的是b3dm格式。
如何判断一个3D Tiles数据是否是1.1版本的?通过这个目录下存在的是b3dm文件还是gltf/glb文件判断。如果存在.b3dm文件,则是1.0版本;如果存在.gltf文件或.glb文件,则是1.1版本。1.1版本的数据如下所示:
一个倾斜摄影数据如果有了上述特征,基本可以判断它是一个3D Tils格式的数据,可以直接用于Easyv的倾斜摄影组件。
3D Tiles数据使用的是地球坐标系(地心地固坐标系)。在3D世界中构建一个虚拟的地球,这个地球的半径和真实地球的半径一致(3D中选用“米”为世界单位),约为6371393(米)。真实地球上任何一个点都可以换算到3D世界的地球上,换算出来的世界坐标都是几百万的数值,世界坐标的向量长度都约为6371393。
地球坐标系
倾斜摄影的数据还有OBJ等其他格式,这些格式也必须转成3D Tiles格式才能在Easyv的倾斜摄影组件中使用。因为大部分的数据的格式都是OSGB或3D Tiles,所以其他格式转换到3D Tiles的方法这里不做说明,请查阅其他相关资料。
OSGB转3D Tiles的方法有很多,这里推荐一种较为普遍的方式,使用第三方工具Cesiumlab来做转换。
Cesiumlab是一款集成了诸多GIS数据处理的工具,点击即可进入官方网站下载
http://www.cesiumlab.com/cesiumlab.html
这里我们只介绍使用Cesiumlab把OSGB格式的倾斜摄影数据转成3D Tiles,其他的功能这里不做介绍。
下载安装完Cesiumlab之后,双击打开程序,它会自动打开浏览器,并打开一个本地服务的页面。初次打开它会需要账号登录,按照指引注册一个新的账号即可。登录成功后会进入如下所示的工作台界面:
按如图所示的顺序进入倾斜模型切片的工作界面:
点击下方按钮选择一个OSGB格式的数据:
此时要注意,OSGB数据是一个文件夹,而上文说到,OSGB数据的根目录下有个名为“Data”的文件夹。而Cesiumlab中这一步骤下数据路径必须指定这个“Data”文件夹才行(不然会莫名其妙转换失败)。如下所示:
选择完毕后,如果检测到确实是一个合法的OSGB数据,空间参考和零点坐标会自动填入正确的值,如下图是所示:
这就表明成功读取OSGB的数据了。
接下来是设置一些转换的参数,对于不是很了解这些参数意义的人来说,保持默认的参数就行了。一些功能的启用需要付费才能使用,如果有需要的可以考虑付费。大部分参数点击旁边的提示按钮都可以看到详细的介绍,所以这里不做过多的解释。
在最右边的存储类型的面板中,需要设置一些参数,才能再Easyv的倾斜摄影组件里正常显示。
勾选这个配置,模型中的顶点都变成地球坐标系下的绝对位置。上文中说到3D Tiles的数据转换到3D世界中,点位都会变成几百万大小的数值。而具体到模型的顶点,如果勾选绝对位置,模型中的顶点是以地心为坐标原点构建的地球坐标系,都是几百万的数值大小;如果不勾选,模型顶点是基于当前倾斜摄影模型的模型空间构建的本地坐标系,数值大小一般是几千(取决于倾斜摄影区域的大小)。
从使用的角度看,因为某些技术原因,建议不要勾选绝对位置。当然,如果是使用了绝对位置的倾斜摄影数据,也能在Easyv的倾斜摄影组件中显示,只不过可能某些情况下有兼容问题。
勾选此项,表示输出的3D Tiles数据的版本是1.1;不勾选,表示输出的3D Tiles数据的版本是1.0。关于1.0版本和1.1版本的区别上文有介绍。
在Easyv组件中使用的数据在这里一定要选择“散列”,这样才会输出成上文中介绍的那种形式的数据。
选择一个输出目录,没有额外的要求。
一切都准备就绪后,点击提交处理按钮即可开始处理数据。
按照如下图所示的步骤操作,可预览之前处理完成的倾斜摄影数据。
除了可以在这个界面预览数据,此时还启动了一个本地的倾斜摄影数据服务,下文中会详细描述。
在Cesiumlab的付费功能中,有一项比较重要的功能就是重建顶层:
勾选这个参数后,输出的数据在运行时会根据情况合并网格,从而减少DrawCall,提升渲染性能。这项功能在瓦片数量较多的时候尤其重要,例如瓦片数在几千以上的时候,如果没有重建顶层这个数据几乎没有硬件能带得动。
这个是一个付费功能,看需求情况自行购买。
当前也有其他的第三方工具可以把OSGB转成3D Tiles,这里不一一介绍。
在介绍启动数据服务的方法之前,先说一个经常会遇到的问题。很多数据服务都是http的,而Easyv线上环境是https的。根据浏览器规则,https下的页面不得访问http的链接,会被视为不安全链接。所以为了能在线上正常使用您的http链接,请开启浏览器设置中的允许不安全内容。(当然,如果您的数据服务的地址也是https的,那么无需进行这一步操作)
在Easyv工作空间页面的左上角点击这个小按钮:
在弹出的菜单中选择“网站设置”:
在跳转过去的页面中,鼠标滚动到底部,可看到一项“不安全内容”,下拉选择选项“运行”。
这时回到Easyv的工作空间页面,地址栏下方会多出一行文字,点击“重新加载”按钮:
刷新页面后即可在https的页面中允许访问http的链接,前提是您能确保http的链接是安全的。
如果遇到放入数据服务的地址到倾斜摄影组件中后,没有模型加载出来,可以考虑是不是这个原因导致的。
Easyv的倾斜摄影组件需要的是一个3D Tiles数据服务的地址,那么如何启动一个数据服务呢?这里有多种方法。
如果您具备自行开发和部署服务的技术能力,那么把倾斜摄影的数据作为静态资源上传到服务器,部署一个静态资源服务,打通相关网络即可。
如果您暂时不清楚如何开发和部署资源服务,而您的倾斜摄影只是想在内网环境下使用,那么可以使用以下的几种方法来搭建本地的资源服务。(如果想搭建互联网可访问的资源服务,还需要自行解决部署问题)
上文说到的预览3D Tiles转换结果的页面也提供了一个可供本地使用的服务地址。如下图所示:
复制图中圈出的url,即可放到倾斜摄影组件中使用。不过这是一个localhost的服务,一般只能在本机或局域网下使用。
使用nginx可快速启动一个本地资源服务,如果你想快速启动一个本地服务,并且你的操作系统是Windows,可以使用以下方案。
下载下面的压缩包,解压到3D Tiles数据的根目录。
解压后文件结构应该是如下图所示:
进入文件夹“nginx-1.12.6”,可看到一个“start.bat”的文件:
双击运行start.bat文件,可看到控制台创建一闪而过。在浏览器中访问http://localhost:5501,如果出现以下页面则表示启动成功:
这样把tileset.json文件的url放到Easyv的倾斜摄影组件中即可加载这个数据。如果已经按照上文所述的方法转换了3D Tiles数据,以及正确放置了nginx的目录,那么tileset.json的url一般是http://localhost:5501/tileset.json。为什么要说“一般是”?上文中说到,一般3D Tiles数据的tileset.json的文件的名称是“tileset”,但这不是强制规定,也可能是任意的其他的文件名。所以,如果打开3D Tiles根目录后,看到的那个唯一的.json文件的名称是“Tile.json”,那么放到倾斜摄影的组件里的url应该是http://localhost:5501/Tile.json,诸如此类的。
上面提供下载的压缩包中其实就是一个nginx的程序,如果想要停止服务或者使用其他端口号来启动服务,这本身是nginx操作,可以查阅相关资料。
上面说的nginx压缩包只能在Windows下运行,如果本地安装了Node.js,可以使用下面的压缩包,操作更方便一些。
下载上面的压缩包后,把其中的两个文件解压到3D Tiles数据的根目录中,解压正确后如下图所示:
双击运行start.bat文件,即可启动一个服务,启动成功后弹出的控制台窗口会显示如下图所示的内容:
这时再按照上一章节描述的方法,获取tileset.json文件的url,一般是http://localhost:5501/tileset.json。
文章
8.94W+人气
17粉丝
1关注
©Copyrights 2016-2022 杭州易知微科技有限公司 浙ICP备2021017017号-3 浙公网安备33011002011932号
互联网信息服务业务 合字B2-20220090