首页 > 其他分享 >GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns

GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns

时间:2024-01-13 11:33:40浏览次数:40  
标签:iTowns GIS 山海 CesiumJS ThreeJS 可视化 整合

大家好,我是山海鲸的技术负责人。今天来和大家分享一下山海鲸可视化在数字孪生系统当中对GIS系统的整合之路,大家可以移步视频教程中看一下目前的整合效果。

【山海鲸可视化GIS系统】第六课 GIS与数字孪生_哔哩哔哩

熟悉山海鲸的朋友应该知道,山海鲸可视化在3.0之后,在软件内部整合了一个3D场景编辑组件-城市大师。城市大师当中不仅实现了体积云天空,Lensflare,雨雪天气,高度指数雾等等特效,也整合了模型库,PBR材质编辑,植被笔刷,标记点,热力图等等非常好用的3D编辑功能(有兴趣的朋友可以下载试一试: 山海鲸可视化-一站式数字孪生开发平台-海量数据可视化大屏模板)。经过了一年时间的加班打磨,作为技术负责人的我终于觉得可以躺下来好好喝杯咖啡了。然而,天不遂人愿。咱们做TOB的人有一个永远的诅咒,那就是软件的开发永远跟不上客户的需求变动的速度。在接触大客户的过程中,GIS系统不断被提及。特别是大部分智慧城市项目,几乎都有自己的测绘数据,DEM,DOM,倾斜摄影等数据,都需要接入到山海鲸的可视化系统当中。问题来了,到底怎么才能把这些GIS数据接入到山海鲸当中,还能共享城市大师中所有的功能呢?

如果是一家没有技术追求的公司,那肯定是CesiumJS拿来用。但是我们不一样啊,作为一个有理想的技术负责人,渲染都不愿意用成熟游戏引擎,要自己来实现。更何况GIS这种纯粹功能的东西,必须要自己写啊。想到这,当然是说干就干:先搞清楚这些GIS名词是啥。

经过一番仔细研究和认真研判(对,就是搜索了几个关键词),最终发现自己还是太年轻。GIS行业的人都不上网的吗?咋没有一个大神出来写一篇GIS从入门到精通呢?这些词这么多,咋解释的文章这么少,还全是抄来抄去的。

要不先看看CesiumJS代码吧,再次经过一番仔细研究和认真研判,发现自研道路道阻且长,作为一个有理智的技术负责人,此时应为整个团队着想,果断放弃自研道路。

目前根据搜索到的信息,有三条路可以走(由于我们采用的Webgl引擎相对小众且做了大量修改,所以搜索时基本都只能搜索ThreeJS的相关内容,因此下面我用CesiumJS和ThreeJS的整合方式来代表和我们的引擎的整合方式):

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后画呢?答案显然是可以的。但是我们依然会面临非常多的整合问题和技术难关,这个我在后面的系列文章中会逐一给大家解释。

标签:iTowns,GIS,山海,CesiumJS,ThreeJS,可视化,整合
From: https://www.cnblogs.com/shanhaibi/p/17962154

相关文章

  • 如何在Linux上搭建本地Docker Registry并实现远程连接
    Hello,大家好我是咕噜铁蛋!当今,Docker已成为了广受欢迎的容器化解决方案。我们需要掌握Docker相关的技能,其中之一就是如何在Linux上搭建本地DockerRegistry并实现远程连接。我也通过科技手段整理了些,今天我将详细介绍如何在Linux上搭建本地DockerRegistry,并实现远程连接,......
  • GIS坐标系与投影
    GIS坐标系与投影笛卡尔坐标系空间直角坐标系空间直角坐标系是指坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道面与X轴成90度夹角,并指向东,形成右手系。空间直角坐标系有右手系和左手系的区分:右手系右手系有两种表示方法,......
  • 删除Azure Container Registry中tag为null的容器镜像
    删除AzureContainerRegistry中tag为null的容器镜像近几年容器技术的蓬勃发展,越来越多的客户开始在Azure中使用AKS,ACR等容器相关的Azure服务,来满足其不断发展的业务使用需求。但随着时间的推移和业务复杂性的增长,很多客户都会发现,ACR中的某些Repo内,显示的清单计数和实际的清单数量......
  • 使用 Docker Compose 部署 Docker Registry
    在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,DockerRegistry成为了我们的救星。DockerRegistry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署DockerRegistry,您可以轻松地构建、存储和分享自己的Docker镜像。本文将详细介绍如何使用DockerCompose快......
  • ArcGIS打不开或者打开后就闪退怎么办?
      本文介绍ArcMap卡在加载界面,无法打开软件的多种解决方法。  最近,突然发现ArcMap软件打不开了,每次双击快捷方式后其会显示如下所示的加载界面,但是等待很久后加载界面消失,软件窗口却一直不弹出来。  此外,在电脑右下角的小图标区域,可以看到ArcGIS的图标原本会出现一段时间,......
  • CF566C Logistical Questions
    更好的阅读体验CF566CLogisticalQuestions好强的题,感觉完全想不到。如果对于每个点都计算答案的话复杂度是\(\mathcalO(n^2)\),但是由于题目中给了一个\(\frac{3}{2}\)次方这么一个非常恶心人的东西,这个算法基本没有优化空间,所以考虑换一种思路,先选择一个点,然后尝试对答案......
  • ArcGIS打开工具箱未响应问题
    有时,打开工具箱的工具时,出现未响应的情况,主要以下规律:(1)所有工具都可能出现这种情况,与工具的功能无关;(2)不是每一次都会出现这样的情况;(3)从目录窗口中打开工具会出现这种情况,从ArcToolbox窗口打开不会出现。不知道是什么原因,遇到这种情况,一般把程序缓冲文件删除后会解决。 ......
  • centos7 yum安装Postgresql14和postgis
    1.安装postgresql#安装依赖包yuminstall-yglibc-develbisonflexreadline-develzlib-develpgdg-srpm-macroslz4-devellibicu-develllvm5.0-develllvm-toolset-7-clangkrb5-devele2fsprogs-devel\openldap-develpam-develperl-ExtUtils-Embedpython3-develt......
  • ArcGIS API for JavaScript 4.x 免登录调用arcgis online私有服务
    APIkeys|ArcGISDevelopers 前言 本来以为普通用户调用服务只能依靠登录,仔细研究了一下可以通过key来实现免登录调用服务。背景最近在做一个BIM结合GIS的Demo,先通过arcgispro将.rvt文件配准到实际位置,然后打包成slpk文件,拖拽到arcgisonline发布出来,最后在前端加载。 ......
  • pnpm切换源后报错ERR_PNPM_REGISTRIES_MISMATCH
    工具都是有利有弊,使用pnpm过程中经常会出现一个错误:Thismodulesdirectorywascreatedusingthefollowingregistriesconfiguration:{"default":"https://registry.npmjs.org/"}.Thecurrentconfigurationis{"default":"https://registry.npm.taob......