二维地图展示爆管分析

作者:doremi

管线系统管理目前大多数都是使用三维客户端来实现的,爆管分析也是在三维客户端上展示的。但是最近有很多客户的来电询问如何在二维地图上实现管线的一些分析功能。因此,本文将介绍如何在二维地图上实现爆管分析的一些思路以及实现过程。

一、数据准备

三维数据
虽然说是在二维地图上实现爆管分析,但是调用的依然是三维的网络分析模块,因此三维数据的准备是必须的。
我将使用iServer自带的三维网络分析的范例数据,包括三维点数据、三维线数据,以及三维网络数据。
三维网络数据的属性表:
二维地图展示爆管分析_第1张图片
二维数据
由于三维数据的查询不带几何信息,无法在前端进行绘制,所以需要一份二维数据来完成查询绘制。可以通过SuperMap iDesktop软件自带的类型转换工具将三维数据转换成二维数据。将转换成二维点线的数据集配成地图保存。
二维地图展示爆管分析_第2张图片

二、发布服务

将准备好的工作空间发布成地图服务,三维网络分析服务。

三、代码实现

加载二维地图为底图

Layer = new SuperMap.Layer.TiledDynamicRESTLayer("底图", url, {transparent: true, cacheEnabled: true},{maxResolution:"auto"});

爆破分析首先需要选择爆管,考虑到鼠标选择线不是那么方便,所以我推荐使用距离查询来选取爆破点

    //查询二维地图的数据,保存查询到的爆管ID
    queryParam = new SuperMap.REST.FilterParameter({name: "PipeLine2D@Pipe3D"});
    queryByGeometryParameters = new SuperMap.REST.QueryByDistanceParameters({
                    queryParams: [queryParam],
                    isNearest:true,     //选择最近查询,并且只返回一个
                    expectCount:1,      
                    geometry: drawGeometryArgs.feature.geometry,
                    distance:0.0001    //设置距离范围,超过此范围就不返回结果
                });

还需要列出三维设施网络分析中指定的设施节点ID数组,一般来说就是阀门

Var sourceNodeIDs='[24,25,34,37,53,61,64,67,73,78,125,127,132,152,161,196,209,212,221,269,276,283,294,299,315,332,349,367,383,423,435,438,444,473,488]';

查询爆管上游最近阀门及阀门下游设施
调用SuperMap.REST. FacilityAnalystUpstream3DService上游关键设施查找资源服务类

var parameter = new SuperMap.REST.FacilityAnalystUpstream3DParameters({
sourceNodeIDs: sourceNodeIDs, //三维设施网络分析中指定的设施结点ID数组,也就是阀门,上面定义了一部分节点,不能为空,如 [84,85]
                    edgeID: BP, //上一步保存的爆管ID
                    nodeID: null,
                    isUncertainDirectionValid: true //三维设施网络分析中指定不确定流向是否有效
                });

结果处理,返回的结果为该爆管位置上游最近阀门,以及该阀门的下游管段的ID数组

function facilityAnalystUpstream_processCompleted(facilityAnalystUpstream3DEventArgs) {
                var result = facilityAnalystUpstream3DEventArgs.result;
                var edgeID = result.edges;
                var nodeID = result.nodes[0];   //只返回了ID,所以还得查询二维数据
                queryBySQL(nodeID,edgeID);
                //alert("需要关闭的最近阀门是:"+nodeID+","+"\n"+"该阀门下游管段:"+edgeID);

由于三维数据查询不返回几何对象,所以需要保存edgeID和nodeID,对二维数据再进行一次查询。需要注意的是三维分析返回的结果是字符串,需要处理下。

    //查询节点
    queryParam1 = new SuperMap.REST.FilterParameter({
                    name: "PipePoint2D@Pipe3D",
                    attributeFilter: "SMID="+nodeID
                });
    //查询弧段
    queryParam2=new SuperMap.REST.FilterParameter({
                    name: "PipeLine2D@Pipe3D",
                    attributeFilter: "SMID in "+str    //str为处理好的edgeID
                });
    //多条件同时查询
    queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
                    queryParams: [queryParam,queryParam2],
                });

最后将查询好的结果添加到vectorLayer中展示出来。

爆管下游设施追踪
调用SuperMap.REST.FacilityAnalystTracedown3DService下游追踪资源服务类
参数:

var parameter = new SuperMap.REST.FacilityAnalystTracedown3DParameters({
                    edgeID: BP,  //爆管ID
                    nodeID: null,
                    weightName: 'SMLENGTH', //三维设施网络分析中指定的权值字段名称
                    isUncertainDirectionValid: true
                });

结果处理与最近阀门分析一样,保存分析返回的结果弧段ID,对二维数据进行查询展示在vectorLayer上。

以上就是爆管分析中最常见的几种分析方式在二维地图中的展示实现过程,其他的比如汇查找和源查找请参考API文档,实现思路也是一样的。
示范程序链接附上http://support.supermap.com.cn/product/CodeLibrary.aspx?id=531

你可能感兴趣的:(二维地图展示爆管分析)