WebGL对接标绘功能流程及注意事项

326 篇文章 85 订阅

自9D版本开始SuperMap iClient3D for WebGL(简称WebGL)支持对接标绘功能,并且研发在第一时间提供了标绘范例,编写了标绘控件,但是还是有客户疑惑,如何从零开始在WebGL上对接标绘功能?对接标绘功能有哪些地方需要注意?如何做一套符合自己业务需求的动态标绘和态势推演系统?接下来我们一一来看。


1.发布三维标绘服务

WebGL标绘功能依赖于三维标绘服务,所以首先需要找到标绘库,发布成三维标绘服务。通常我们可以在iDesktop的安装目…\Templates\Plot下能找到标绘库,然后通过iServer发布成三维标绘服务。

在这里插入图片描述

在这里插入图片描述

2.使用封装好的标绘控件

首先我们需要引用标绘扩展模块文件,这里我们需要注意几点,(1)某些WebGL版本中在依赖库文件夹里面存在两个标绘扩展模块文件,我们需要引用名称为“PlotAlgoInclude_NoCommon.js”的文件,因为该文件解决了与某些其它库文件命名冲突的问题。(2)如果同时要使用二维客户端某些功能(例如查询)和三维标绘功能,需要先引用二维库文件,再引用标绘扩展模块文件。(3)要使用封装的标绘控件,需要先引用jquery,再引用封装好的标绘控件文件“PlottingUI.Include.js”。具体引用顺序如下:

在这里插入图片描述

<script src="./js/supermap/SuperMap.Include.js"></script>
<script type="text/javascript" src="../Build/Cesium/ThirdParty/Workers/PlotAlgo/PlotAlgoInclude_NoCommon.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/plotPanelControl/PlottingUI.Include.js"></script>

最后就是编写功能代码,第一步,创建一个标绘图层,添加到场景中:

 plottingLayer = new cesium.PlottingLayer(scene, "plottingLayer");
 scene.layers.add(plottingLayer);

第二步,实例化标绘控件面板,初始化风格面板:

 plotEditControl = new cesium.PlotEditControl(scene, plottingLayer);//编辑控件
 plotDrawControl = new cesium.PlotDrawControl(scene, plottingLayer);//绘制控件
 plotting = cesium.Plotting.getInstance(serverUrl, scene); //标绘面板
 initPlotPanel("plotPanel", serverUrl, plotDrawControl, plotEditControl,plotting);
 stylePanel = new StylePanel('stylePanel', plotEditControl, plotting);

第三步,做一些逻辑控制功能,标绘结束,激活编辑控件:

 plotDrawControl.drawFinishEvent.addEventListener(function () {//标绘结束,激活编辑控件
        plotEditControl.activate();
    });

这样我们就使用上了研发封装好的标绘控件,完整代码获取方式将在文章最后给出,功能效果如图:

在这里插入图片描述

3.使用代码来创建标绘符号和动画

首先还是引用标绘扩展文件“PlotAlgoInclude_NoCommon.js”,然后就开始编写功能代码:

第一步,创建标绘图层,添加至当前场景:

plottingLayer = new cesium.PlottingLayer(scene, "plottingLayer");
scene.layers.add(plottingLayer);

第二步,获取标绘实例,创建动画管理类:

plotting = cesium.Plotting.getInstance(serverUrl, scene);
animationManager = plotting.getGOAnimationManager();

第三步,创建符号位置对象:

var pointsJGSZ = [];
pointsJGSZ[0] = new cesium.Cartesian3(13.0486416724835, 47.827217402435, 0);

第四步,创建标绘符号和动画,这里需要指定符号库ID和符号ID,建议在iDesktop打开标绘功能,在属性中查看符号库ID和符号ID。

plottingLayer.createSymbol(22, 1004, pointsJGSZ, function (even) {
            geoJGSZ = even.feature;
            var goAnimationJGSZ = animationManager.createGOAnimation(cesium.GOAnimationType.ANIMATION_GROW, "JGSZ", geoJGSZ);//进攻警力生长动画
            goAnimationJGSZ.startTime = 0;//动画开始时间
            goAnimationJGSZ.duration = 5;//动画播放时长
        });//22是符号库ID,1004是符号ID

然后我们就用代码创建好了一个带生长动画的标绘符号,效果如下图:

在这里插入图片描述

完整WebGL包获取地址:

链接:https://pan.baidu.com/s/1jQZdw7yy_4gMtu-2buW9vw
提取码:yqbw
完整代码参考WebGL包中examples目录下plot_dynamicPlot.html和plot_plotGOAnimation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值