博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维爆管分析
阅读量:4163 次
发布时间:2019-05-26

本文共 4336 字,大约阅读时间需要 14 分钟。

作者:LX

一、 背景

前面的文章《》中介绍了三维爆管分析,但是很多小伙伴不清楚如何实现二维爆管分析,下面就详细的介绍一下二维爆管分析实现流程。

二、 数据准备

网络数据集准备,网络数据集需要在idesktop中构建,详细的构网步骤请参考idesktop帮助文档中“构建网络数据”中的介绍。

本文用到的网络数据可在文末下载。

三、 网络分析服务发布

1、到iServer服务管理界面,选择“快速发布服务”,数据来源选择“工作空间”

在这里插入图片描述
2、工作空间类型选择“文件型”,工作空间路径点击“远程浏览”,找到实际工作空间文件存放的位置
在这里插入图片描述
3、发布的服务类型选择“交通网络分析服务”
在这里插入图片描述
4、配置交通网络分析参数
在这里插入图片描述
5、点击“完成”,发布服务成功,直接点击服务链接即可访问服务。
在这里插入图片描述
6、修改服务配置文件
打开【iServer根目录】/ webapps/iserver/WEB-INF下的iserver-services.xml找到发布的交通网络分析服务的服务提供者,把initFacilityAnalyest节点改成true,然后添加directionField字段。如下图所示:
在这里插入图片描述
PS:
initFacilityAnalyest:是否初始化设施网络分析,默认为false。修改为true后,将开启爆管分析、上下游关键设施查找分析功能。directionField:流向字段,当initFacilityAnalyst为true时,该参数必填。

四、 代码实现

1、 定义底图

//初始化图层  layer = new SuperMap.Layer.TiledDynamicRESTLayer("map", url, {transparent: true, cacheEnabled: true},{maxResolution:"auto"});

2、 指定设施点并显示在地图上,本例中设施点就是阀门

//指定设施点ID数组     var sourceNodeIDs = [1,10,20,29,30,40,51,53,55,57,66,79];   //通过ID查询设施点     function addvalve(){            var valve="(";				for(var i=0;i

显示的阀门位置如下:

在这里插入图片描述
3、 确定爆管位置,通过画点控件画的点位来模拟爆管的位置

//画点控件  drawPoint = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Point);  drawPoint.events.on({"featureadded": drawPointCompleted});  map.addControl(drawPoint);//选择爆管位置成功function drawPointCompleted(drawGeometryArgs) {	drawPoint.deactivate();     var feature = new SuperMap.Feature.Vector();     feature.geometry = drawGeometryArgs.feature.geometry,     feature.style = {};     vectorLayer.addFeatures(feature);       //查询爆管位置所在的弧段        var queryParam, queryByGeometryParameters, queryService;        queryParam = new SuperMap.REST.FilterParameter({name: "burstdata_Network@burstdata"});        queryByGeometryParameters = new SuperMap.REST.QueryByDistanceParameters({           queryParams: [queryParam],           isNearest:true,	//选择最近查询,并且只返回一个           expectCount:1,		           geometry: drawGeometryArgs.feature.geometry,          distance:100        });        queryService = new SuperMap.REST.QueryByDistanceService(url, {            eventListeners: {                "processCompleted": processCompleted_select,                "processFailed": processFailed            }        });        queryService.processAsync(queryByGeometryParameters);    }    //地图上显示爆管位置    function processCompleted_select(queryEventArgs) {             drawPoint.deactivate();             var i, j, result = queryEventArgs.result;             if (result && result.recordsets) {                 recordsets=result.recordsets;                             var feature = recordsets[0].features[0];                             feature.style = style;                             vectorLayer.addFeatures(feature);					var center=feature.geometry.getBounds().getCenterLonLat();					var point=new SuperMap.Geometry.Point(center.lon,center.lat);					var BPpoint=new SuperMap.Feature.Vector();					BPpoint.geometry=point;					BPpoint.style={					fillColor: "red",                             pointRadius: 6,					};					vectorLayer1.addFeatures(BPpoint);					BP=feature.data.SmID;					alert("爆管点:"+BP);             }         }

爆管位置:

在这里插入图片描述
4、 设定爆管分析参数

var parameter = new SuperMap.REST.BurstPipelineAnalystParameters({					sourceNodeIDs: sourceNodeIDs, //设施点ID数组				    edgeID: BP,  //爆管弧段ID,既查询弧段内容					nodeID: null,   //爆管结点ID (注:edgeID 与 nodeID 不能同时使用)					isUncertainDirectionValid: true //指定不确定流向是否有效				});

5、 执行分析

var burstPipelineAnalystService = new SuperMap.REST.BurstPipelineAnalystService(analysisServiceurl,{		eventListeners: {"processCompleted": BurstPipelineAnalyst_processCompleted}			});burstPipelineAnalystService.processAsync(parameter);

6、 获取分析结果,找到受影响的位置并显示在地图上

//爆管分析成功	function BurstPipelineAnalyst_processCompleted(BurstPipelineAnalystEventArgs) {		var result = BurstPipelineAnalystEventArgs.result;		//上下游中受爆管位置影响的弧段ID		var edgeID = result.edges;		//爆管分析中受爆管位置影响的上下游的关键设施点ID		var criticalNodes = result.criticalNodes;	   queryBySQL(criticalNodes,edgeID);	}	//通过受影响的弧段和关键设施点ID查询到对应的对象			function queryBySQL(criticalNodes,edgeID){			var queryParam,queryParam2, queryBySQLParams, queryBySQLService;            queryParam = new SuperMap.REST.FilterParameter({                name: "burstdata_Network_Node@burstdata",                attributeFilter: "SmNodeID in ("+criticalNodes+ ")"            });			var str="(";			for(var i=0;i

分析结果展示:在这里插入图片描述图中可以该点爆管时,需要关闭29号和57号阀门。

本文所有到的数据和代码,请访问如下地址下载:

https://download.csdn.net/download/supermapsupport/11762243

转载地址:http://fupxi.baihongyu.com/

你可能感兴趣的文章
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
LOCAL_PRELINK_MODULE和prelink-linux-arm.map
查看>>
Simple Guide to use the gdb tool in Android environment
查看>>
Netconsole to capture the log
查看>>
Build GingerBread on 32 bit machine.
查看>>
How to make SD Card world wide writable
查看>>
Detecting Memory Leaks in Kernel
查看>>
Linux initial RAM disk (initrd) overview
查看>>
Timestamping Linux kernel printk output in dmesg for fun and profit
查看>>
There's Much More than Intel/AMD Inside
查看>>
CentOS7 安装MySQL 5.6.43
查看>>
使用Java 导入/导出 Excel ----Jakarta POI
查看>>