在数字孪生技术的实际项目应用中,有大量GIS系统的相关需求。例如大部分智慧城市项目几乎都有自己的测绘数据、DEM、DOM、倾斜摄影等数据,都需要接入到数字孪生系统当中。数字孪生需要的功能可以用类似山海鲸可视化这样的软件来实现,但是GIS系统能否接入到数字孪生软件当中,同时还能共享数字孪生软件中所有的功能呢?这里便引出了我们的下一个话题。
这里以山海鲸可视化这款比较典型的数字孪生软件为例,它的3D引擎专门用于数字孪生,同时支持在软件内进行3D场景编辑,非常契合GIS融合这方面的需求。
(贴一下山海鲸可视化官网,有兴趣的朋友可以自己试试看,反正是免费的。)
目前,数字孪生软件和GIS系统的融合大概有以下三条路可以走:
1.整合CesiumJS到系统中
优势:CesiumJS非常成熟,几乎支持了大部分常用的GIS协议,且性能优化较好
劣势:CesiumJS自己实现了底层的渲染功能,无法直接嫁接到软件的渲染引擎当中
2.给iTown写一个中间件
优势:iTown底层基于Threejs,易于嫁接
劣势:iTown本身不成熟,即使整合成功也可能会面临额外工作
3.使用loaders.gl加载成功后,直接写入渲染引擎
优势:开发起来自由灵活,类似自研
劣势:对tiles的加载几乎需要自己实现
最终,考虑到市场对于稳定性的需求,以及研发时间上的限制,还是决定选择CesiumJS整合这条路径。然后经过一番深入的研究发现这条路实际也是道阻且长,网上仅搜索到了几篇文章谈到了ThreeJS和CesiumJS的整合方式。
(1) 直接将两个Canvas叠加到一起,并同步相机实现。但这种实现方式远不能满足深度整合的需求。
(2) 采用CesiumJS的DrawCommand来实现ThreeJS的渲染底层,这种方式整合程度更深,但是软件已经在自己的渲染引擎中做了太多的定制,几乎不可能在这个时候迁移到CesiumJS的DrawCommand当中去。
那么有没有既不需要动目前的渲染引擎底层,又不至于像是两个Canvas这种非常浅的整合方式呢?当然是有的。实际上,无论是CesiumJS还是类似ThreeJS,他们底层目前都是基于WebGL/WebGL2绘制到Canvas来实现的(WebGPU还远没有成熟),那么我们是不是可以直接在一个Canvas让CesiumJS先画,ThreeJS后画呢?答案显然是可以的。但是依然会面临非常多的整合问题和技术难关,这个在后面的文章中会逐一给大家解释。
上一篇:【杂谈】“CommunityToolkit.Mvvm无法自动生成Get/Set属性对”的解决方案
下一篇:【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块