一、背景
2005年谷歌地球横空出世,将地球以三维可视化方式展现在每一个电脑屏幕前的用户,掀起了数字地球热潮,而随着三维倾斜摄影模型数据的加入,将谷歌地球对全球的三维可视化效果表达,提升到了更高的层次。作为全球三维倾斜摄影覆盖面积最广的三维数字地球平台,谷歌地球为大家提供了全球各地的城市、森林、火山等各种地理要素的三维可视化表达,同时结合当今VR、AR平台创建游戏等真实场景,数据可视化更加立体和真实。Cesium作为开源的三维数字地球平台,将重点放在地理信息数据的接入与可视化,用户只需要关注上层业务开发,同时扩展“端”的表现形式,将Cesium与JavaScript前端、以及Unity、Unreal等游戏引擎结合,形成了当今开发者使用最广泛的开源三维数字地球平台。Cesium与谷歌地球的结合,源于2023年5月,谷歌官方将google倾斜摄影模型数据转换成Cesium能够接入的3DTiles格式,并在Google Map Platforms平台发布,用户可以通过GEE平台,生成数据调用API。2023年10月,两者的结合更进一步,谷歌倾斜摄影3DTiles数据集成到Cesium ion中,开发者只需要通过Cesium ion便可以访问谷歌全部共计49个国家2500多个城市的数据,大大方便了开发者对数据的使用。 但是对国内开发者来说,由于网络问题,开发者想访问这份数据是比较困难的,加上国内使用Cesium的场景大部分都是离线环境下,这份数据离国内开发者还比较遥远,国内开发者为了获取这份数据,付出了不少努力。
二、技术路线
谷歌倾斜摄影模型数据使用二进制进行编码,想要逆向转换,难度极大,但是国人的智慧是无穷的,主要技术路线如下: 1.既然无法逆向转换,那直接使用谷歌官方的程序解析文件,用帧缓存渲染工具保存成模型文件,再通过模型工具进行模型合并,这样就能获取一份面积很大的数据,再通过obj转3dtiles工具进行3DTiles数据生成。这种技术原理在CSDN上有开发者已经实现,大家可以搜索相关文章查看,具体原理大致如下:使用专门下载工具下载文件,并且结合图形开发调试神器RenderDoc以及Blender模型建模软件,直接将当前相机视景中的瓦片文件合并导出成一个obj或者fbx文件,再通过Blender进行模型合并成一个大的模型文件,最后使用obj生成3DTiles瓦片数据。这种技术路线直接,但是很繁琐,因为要获取高分辨率数据,需要不停移动场景,再通过工具生成模型,获取一屏数据还好,如果是获取整个大范围,每一屏都需要人工干预,非常耗费人工,而且要按照谷歌建立22层级LOD,很困难。这不禁让人想起之前获取谷歌影像数据的方法,当时也是按照IP限流,下载到指定数量后,IP就被谷歌官方封禁了,有人想出了奇招,获取当前窗口像素宽高和地理范围大小,再通过自动平移地图,对当前窗口进行截屏,这样就获取了当前窗口屏幕地理范围大小范围的影像,再进行瓦片切分,生成影像瓦片数据。 2.既然谷歌已经生成3DTiles数据,那直接把这份数据爬下来不就行了,很可惜,这份数据是按访问次数收费的,想全部爬下来,花的钱也不少,但是Cesium ion已经集成了这份数据,可以通过这个平台进行爬取,这种方式好处很直接能够下载直接用,坏处是谷歌地球倾斜模型数据一年至少更新6、7次,数据更新时,无法及时获得最新的3DTiles数据。 3.有没有可能不借助RenderDoc,Blender等人工工具干预,直接解析谷歌最新原始瓦片数据,生成3DTiles数据呢,谷歌数据虽然是二进制数据,但是解析后也是Mesh格式,很多格式都通用的,那就逐瓦片解析,直接生成3DTiles的b3dm数据,我通过长时间不懈努力,证明这路线是可行的,能够完全生成谷歌1~最高级瓦片数据,与谷歌官方生产的3DTiles数据相比,显示性能和显示效率更好。
二、数据介绍
基于第三种技术路线,开发了谷歌倾斜模型3DTiles转换工具,并使用香港倾斜模型数据进行了验证,生成了香港地区倾斜模型3DTiles数据,香港3DTiles数据覆盖范围如下:
覆盖面积大约565平方公里,生成的3DTiles数据有546GB大小,共有26500578个文件,包括json配置文件以及b3dm数据文件类型
文件压缩后大小也有236GB
三、数据可视化效果
将数据放在本地,使用Nginx发布,前端使用的是Cesium官方版本,底图是Arcgis卫星影像底图数据,除了加载香港3DTiles数据外,未加载其他数据。从视频中可以看到,3DTiles数据加载访问仍然很流畅,场景漫游缩放也相当丝滑,没有卡顿与迟滞,渲染帧率也相当高。由于无法播放视频,下面放几张效果截图
Cesium加载代码如下:
let tileset = await Cesium.Cesium3DTileset.fromUrl(
"http://localhost:8802/tileset.json");
viewer.scene.primitives.add(tileset);
viewer.scene.globe.depthTestAgainstTerrain = false;
注意:使用3dtiles数据,需要关闭depthTestAgainstTerrain,否则会有地形高程遮挡显示问题。
四、结语
谷歌倾斜模型转换工具生成的3DTiles数据,不仅生产效率高,而且在海量数据甚至全球数据加载显示方面优势明显,数据显示效率和显示性能优于官方3DTiles数据,更实现了对谷歌倾斜摄影数据的逆向解析以及转换成3DTiles格式数据,相比较使用RenderDoc、Blender等工具,耗费人工工时大大减少,在建立数据LOD及显示效率上大大增强,使将谷歌最新的全球倾斜模型数据转换生成3DTiles数据,成为可能!目前生产的香港3DTiles数据基本上覆盖了香港的绝大部分区域,是一份使用价值相当高的数据,在加载到Cesium上数据质量和显示效率俱佳。这份数据目前免费向读者提供,有需要的开发者可以在评论区留言或者私信联系,未来我将持续提供优质数据,为开发者和用户提供更好的开发基础数据和用户体验!