说说基于BS架构的三维地图引擎如arcgis以及三维引擎cesium等在数字孪生三维可视化项目中踩过的那些坑

Posted 睿博静德

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说基于BS架构的三维地图引擎如arcgis以及三维引擎cesium等在数字孪生三维可视化项目中踩过的那些坑相关的知识,希望对你有一定的参考价值。

      不知从何年何月BS架构的系统在PC端领域占据了大半壁江山,众多的软件公司为了迎合客户,在项目中纷纷采用BS架构,也因此导致培养了一大批相应的程序员技术人才。
     然而,在移动端、手机领域,却又出现另一番景象,CS架构的桌面APP则是出于绝对的统治地位,app一定要占据用户桌面。


     为此涌现了大批手机app开发程序员。要知道,app软件有原生开发和混合开发,大多数app是  基于混合开发的,比如安卓app开发,app程序本身需要原生技术进行开发,如java或者c++,内容页则是基于h5开发,也就是BS架构的开发。
      不过,不管是哪种手机端还是PC端,不管是BS还是CS架构,都是对数据的处理和支持,而且是轻量级的业务数据。
       那么,在三维数据面前,混合架构和BS架构哪种更适合呢,哪种更能经得起考验呢
       三维地图、三维模型已经作为支撑的各种引擎,发展了不是一天两天了。
      先说说地图引擎吧,不管国内还是国外,地图引擎它首先是一款桌面版的软件,不管是服务器版还是客户端版本。
      现如今,很多有名的地图引擎,比如arcgis,就支持三维地图和倾斜摄影三维模型。曾经有位朋友投标中了一个三维可视化项目,客户的需求是在浏览器下浏览三维可视化场景,朋友就选择arcgis服务器版,将三维地图和倾斜摄影三维模型部署到服务器,规模也不是特别的大不到10G,在项目验收的时候,客户在浏览器内无法打开三维可视化场景。
大家猜一下,这个项目最后验收没有?

      再说说cesium,cesium有多火多炫就不用说了,也有大批的公司和程序员在使用和学习它。
曾经在一家公司遇到过,老板要求程序员用cesium实现三维视频融合,程序员非常努力,有二三年的研发经验,在cesium平台上搭建三维场景,并且部署到服务器测试,场景不大,一个万达的模型及其周边地图,就这,单台笔记本访问很费劲,加载很慢,BS结构也是服务于多人同时访问的,这怎么能行?
      好了,有了三维场景了,那就要将视频与场景进行融合,最终的想法是将万达的监控摄像机融合到万达模型中,研究了一段时间,只发现cesium对视频文件有支持,可以与三维场景进行融合,可以测试,但是对监控实时视频没有相应的支持,最后只能放弃,用最传统的办法,通过加标签的方式,以弹出视频播放器的方式来对监控的支持,但是融合的想法只能放弃了。cesium引擎不支持。
      还有一位朋友,自己开公司,中标一个三维项目,上述的性能问题都出现了,没办法,砍啊,不要考虑地图了,模型砍的小一点,好歹经过缩水可以运行了,
      但是跟最初的三维场景可视化相差万里了。

       总结来说,上述的三个例子,想通过BS架构来对三维数据支持,想跟业务数据那样流畅似乎效果不是很理想,甚至不现实。
       曾经,见到过一份标书,标书要求BS架构,实现三维可视化平台。上面两个例子已经说明,肯定可以实现,能不能用自己体会就是了。
       不难看出,写标书的人是个什么水平,并没有接触过实际项目,对各种引擎的性能认识不多。

      不知道什么原因,至今仍有那么多招标的甲方,仍有那么多公司继续踩上面的坑,就那么深爱BS架构,前仆后继。那么看不上混合架构或者CS架构?
     如果是思想方面没有这方面意识,建议了解一下,换一下思维方式,如果硬是坚持,那么恭喜,道路漫漫...
      混合架构在移动端领域处于绝对统治地位,上面已经介绍。
它内嵌BS架构容器,因此每个app也是一个超级浏览器,混合架构有个潜在的好处就是不用考虑各家浏览器的适配,自己就是“浏览器”。
       其实混合架构在PC端早有应用,并不是移动端专有,比如QQ,还有360,里面很多内容都是基于混合架构实现。
       作为三维可视化引擎,时空克隆就是基于混合架构实现的。

元宇宙的兴起,让以三维视频融合与三维投影融合为核心、以倾斜摄影和三维地图构筑的CIM作为托底的时空克隆引擎,成为时代的主流技术,以此打造了混合架构的魔镜平台


       混合架构既有BS架构界面的美观,又有CS架构充分发挥机器性能,而且也不会因为服务器的问题,或者网络带宽的问题,影响到其他用户。
       时空克隆开放了源代码,研发团队可以进行二次开发,三维环境的开发,视频融合的开发,都已经实现,不像其他平台,都要自己从新造轮子,从头来,
时空克隆一款专业的三维视频融合引擎,研发人员只要把精力放在如何解决客户需求,如何引入物联网设备数据等即可。

济南用魔镜打造元宇宙城市,难道是真的?


       毕竟,公司是需要盈利的,能够快速解决用户的需求,快速变现才是根本。
那种在内心深处想“拥有”自己的这种想法,是需要付出精力和财力,还有风险,任何的一种尝试都是需要付出成本的,而且这种尝试很可能会失败。
       这也是很多公司老板喜欢赚快钱,项目在研发过程中几乎不会遇到过不去的坎,普通程序员都能解决,拿来主义就可以。

点卯  时空克隆  三维视频融合 三维投影融合  全景三维  CIM  魔镜下载


 

 

openlayers和cesium实现地图二三维切换

本文介绍如何在普通2d的gis项目里实现地图的二、三维切换。二维地图引擎市面上比较多,比较有代表性的像openlayers、leaflet等。三维地图目前比较流行的开源方案有cesium,它本身是基于webGL实现的地图引擎。

cesium在vue上实现需要很多步骤,我之前写过一篇总结,是基于vuecli2.0实现的。按步骤一步步实现,问题不大。如果你是用vuecli3搭建的项目,这里有篇文章介绍用vuecli3实现引用cesium。如果要实现二三维地图切换,难点是地图引擎的转换,有个插件已经帮忙实现了这个工作:ol-cesium。

 

场景需求

好了,我来捋捋场景,搞清楚需求:

1、openlayers加载地图

2、cesium加载三维地图

3、实现二、三维地图切换

4、在vue框架上实现以上功能

实现步骤

一、用openlayers加载地图

此处略过,虽然简单,但是对于没有接触过gis的前端同学还是有入门门槛的。那既然是要实现以上需求,应该就是要做gis项目的人。既然是做gis项目的,那这个ol加载地图就不应该是难点,官网有很多示例,所以此处略过。

还是给一个示例代码:

<template>
<div id = "map">

</div>
</template>
<script>
import \'ol/ol.css\';
import Map from \'ol/Map\';
import OSM from \'ol/source/OSM\';
import TileLayer from \'ol/layer/Tile\';
import View from \'ol/View\';

var olmap = new Map({
layers: [
new TileLayer({
source: new OSM(),
}) ],
target: \'map\',
view: new View({
center: [0, 0],
zoom: 2,
}),
});
</script>

二、用cesium加载三维地图

cesium加载三维地图对于gis行业的同学来说也是个麻烦事,更别说要在vue框架上实现了。

以vuecli3为例,引用cesium其实只用几步:

安装vue-cli-plugin-cesium插件
// npm
npm install--save-dev vue-cli-plugin-cesium

// yarn
yarn add vue-cli-plugin-cesium
直接在vue组件中使用

安装好了就可以直接new出来用,因为它已经绑定了vue实例;

<template>
<div id= "cesiumContainer">
</div>
</template>
<script>
export default {
name: "",
mounted(){
var viewer = new Cesium.Viewer("cesiumContainer")
}
}
</script>

三、实现二、三维地图切换

安装olcs插件

这是一个用于实现openlayers与cesium切换的插件,详细文档移步官网

npmi --save olcs
实现二、三维切换
import OLCesium from \'olcs/OLCesium.js\';
const ol3d = new OLCesium({map: ol2dMap}); // ol2dMap 是openlayers绑定的地图对象
ol3d.setEnabled(true);

需要注意的就是上面代码中的ol2dMap是openlayers绑定的地图对象,这个业内同学都懂。结合前面的ol示例,就是那个olmap对象。

四、注意要点

如果有这样的需求:本来是二维地图有个矢量地图,比如一个什么专题图;然后切换到了三维地图,我仍然要能在三维地图上看到那个专题图。

现在切换到三维后,效果是有了,平面变三维地球,问题是之前的那个专题图也看不见了!原因就是切换到三维后,二维地图被覆盖了。 解决办法就是,切换到三维后,再用cesium引擎加载平面专题图;

cesium加载平面地图
var ol3dLayers = ol3d.getCesiumScene().imageryLayers;
        // eslint-disable-next-line no-undef
        ol3dLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
          url: \'http://**************/arcgis/rest/services/**/******/MapServer\'
        }))

上面的示例地图是一个aricgis动态服务;

最后上图,来看下效果:

参考资料:

https://blog.csdn.net/u010001043/article/details/74279380

https://cesium.com/docs/cesiumjs-ref-doc/ArcGisMapServerImageryProvider.html

https://mp.weixin.qq.com/s/3Of_xKhUOxiwFhJoZ0U-Mg

 

本文分享自微信公众号 - 字节逆旅(wvivw_007)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

以上是关于说说基于BS架构的三维地图引擎如arcgis以及三维引擎cesium等在数字孪生三维可视化项目中踩过的那些坑的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS Pro风暴ArcGIS Pro 2.5基于矢量数据制作拉伸三维地图案例

第十四章:ArcGIS三维分析

第十四章:ArcGIS三维分析

关于ArcGIS的Web 3D GIS问答

[GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界

[GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界