二维爆管分析
作者: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<sourceNodeIDs.length;i++){if(i!=sourceNodeIDs.length-1){valve+=sourceNodeIDs[i]+",";}else{valve+=sourceNodeIDs[i]+")";}}var valvequeryParam,valvequeryBySQLParams,valvequeryBySQLService;valvequeryParam=new SuperMap.REST.FilterParameter({name: "burstdata_Network_Node@burstdata",attributeFilter: "SmNodeID in "+valve});valvequeryBySQLParams = new SuperMap.REST.QueryBySQLParameters({queryParams: [valvequeryParam],});valvequeryBySQLService = new SuperMap.REST.QueryBySQLService(url, {eventListeners: {"processCompleted": valveprocessCompleted, "processFailed": processFailed}});valvequeryBySQLService.processAsync(valvequeryBySQLParams); }//將設施點顯示在地圖上function valveprocessCompleted(e){var valvepoint=[],features=e.result.recordsets[0].features;for(var i=0;i<features.length;i++){valvegeo=features[i].geometry;var valvepointVector = new SuperMap.Feature.Vector(valvegeo);valvepointVector.style = {fillColor: "SteelBlue ",pointRadius: 6,label:"閥門",fontWeight:"bold",labelXOffset:-20,fontColor:"SteelBlue "};valvepoint.push(valvepointVector);}vectorLayer2.addFeatures(valvepoint);}顯示的閥門位置如下:
3、 確定爆管位置,通過畫點控件畫的點位來模擬爆管的位置
爆管位置:
4、 設定爆管分析參數
5、 執行分析
var burstPipelineAnalystService = new SuperMap.REST.BurstPipelineAnalystService(analysisServiceurl,{eventListeners: {"processCompleted": BurstPipelineAnalyst_processCompleted}}); burstPipelineAnalystService.processAsync(parameter);6、 獲取分析結果,找到受影響的位置并顯示在地圖上
//爆管分析成功function BurstPipelineAnalyst_processCompleted(BurstPipelineAnalystEventArgs) {var result = BurstPipelineAnalystEventArgs.result;//上下游中受爆管位置影響的弧段IDvar edgeID = result.edges;//爆管分析中受爆管位置影響的上下游的關鍵設施點IDvar 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<edgeID.length;i++){if(i!=edgeID.length-1){str+=edgeID[i]+",";}else{str+=edgeID[i]+")";}}queryParam2=new SuperMap.REST.FilterParameter({name: "burstdata_Network@burstdata",attributeFilter: "SMID in "+str});queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({queryParams: [queryParam,queryParam2],});queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {eventListeners: {"processCompleted": processCompleted, "processFailed": processFailed}});queryBySQLService.processAsync(queryBySQLParams); }function processCompleted(queryEventArgs) {var i, j,affectedPoint=[],affectedLine=[],result = queryEventArgs.result;if (result && result.recordsets) {//受影響的設施點if(result.recordsets[0].features){for(i=0;i<result.recordsets[0].features.length;i++){affectedgeo=result.recordsets[0].features[i].geometry;var affectedPointvector=new SuperMap.Feature.Vector();affectedPointvector.geometry=affectedgeo;affectedPointvector.style={fillColor: "Yellow",pointRadius: 6};affectedPoint.push(affectedPointvector);}vectorLayer.addFeatures(affectedPoint);}//受影響的弧段if(result.recordsets[1].features){for(j=0;j<result.recordsets[1].features.length;j++){var affectedLinefea=result.recordsets[1].features[j];affectedLinefea.style={strokeColor:"red",strokeWidth:3}affectedLine.push(affectedLinefea);}vectorLayer.addFeatures(affectedLine);}}}分析結果展示:圖中可以該點爆管時,需要關閉29號和57號閥門。
本文所有到的數據和代碼,請訪問如下地址下載:
https://download.csdn.net/download/supermapsupport/11762243
總結
- 上一篇: OpenCVSharp 基于特征的图像
- 下一篇: H.264视频编解码器与H.265编解码