二维爆管分析
作者:LX
一、 背景
前面的文章《二維地圖展示爆管分析》中介紹了三維爆管分析,但是很多小伙伴不清楚如何實(shí)現(xiàn)二維爆管分析,下面就詳細(xì)的介紹一下二維爆管分析實(shí)現(xiàn)流程。
二、 數(shù)據(jù)準(zhǔn)備
網(wǎng)絡(luò)數(shù)據(jù)集準(zhǔn)備,網(wǎng)絡(luò)數(shù)據(jù)集需要在idesktop中構(gòu)建,詳細(xì)的構(gòu)網(wǎng)步驟請(qǐng)參考idesktop幫助文檔中“構(gòu)建網(wǎng)絡(luò)數(shù)據(jù)”中的介紹。
本文用到的網(wǎng)絡(luò)數(shù)據(jù)可在文末下載。
三、 網(wǎng)絡(luò)分析服務(wù)發(fā)布
1、到iServer服務(wù)管理界面,選擇“快速發(fā)布服務(wù)”,數(shù)據(jù)來(lái)源選擇“工作空間”
2、工作空間類(lèi)型選擇“文件型”,工作空間路徑點(diǎn)擊“遠(yuǎn)程瀏覽”,找到實(shí)際工作空間文件存放的位置
3、發(fā)布的服務(wù)類(lèi)型選擇“交通網(wǎng)絡(luò)分析服務(wù)”
4、配置交通網(wǎng)絡(luò)分析參數(shù)
5、點(diǎn)擊“完成”,發(fā)布服務(wù)成功,直接點(diǎn)擊服務(wù)鏈接即可訪(fǎng)問(wèn)服務(wù)。
6、修改服務(wù)配置文件
打開(kāi)【iServer根目錄】/ webapps/iserver/WEB-INF下的iserver-services.xml找到發(fā)布的交通網(wǎng)絡(luò)分析服務(wù)的服務(wù)提供者,把initFacilityAnalyest節(jié)點(diǎn)改成true,然后添加directionField字段。如下圖所示:
PS:
initFacilityAnalyest:是否初始化設(shè)施網(wǎng)絡(luò)分析,默認(rèn)為false。修改為true后,將開(kāi)啟爆管分析、上下游關(guān)鍵設(shè)施查找分析功能。directionField:流向字段,當(dāng)initFacilityAnalyst為true時(shí),該參數(shù)必填。
四、 代碼實(shí)現(xiàn)
1、 定義底圖
//初始化圖層layer = new SuperMap.Layer.TiledDynamicRESTLayer("map", url, {transparent: true, cacheEnabled: true},{maxResolution:"auto"});2、 指定設(shè)施點(diǎn)并顯示在地圖上,本例中設(shè)施點(diǎn)就是閥門(mén)
//指定設(shè)施點(diǎn)ID數(shù)組var sourceNodeIDs = [1,10,20,29,30,40,51,53,55,57,66,79];//通過(guò)ID查詢(xún)?cè)O(shè)施點(diǎn)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); }//將設(shè)施點(diǎn)顯示在地圖上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:"閥門(mén)",fontWeight:"bold",labelXOffset:-20,fontColor:"SteelBlue "};valvepoint.push(valvepointVector);}vectorLayer2.addFeatures(valvepoint);}顯示的閥門(mén)位置如下:
3、 確定爆管位置,通過(guò)畫(huà)點(diǎn)控件畫(huà)的點(diǎn)位來(lái)模擬爆管的位置
爆管位置:
4、 設(shè)定爆管分析參數(shù)
5、 執(zhí)行分析
var burstPipelineAnalystService = new SuperMap.REST.BurstPipelineAnalystService(analysisServiceurl,{eventListeners: {"processCompleted": BurstPipelineAnalyst_processCompleted}}); burstPipelineAnalystService.processAsync(parameter);6、 獲取分析結(jié)果,找到受影響的位置并顯示在地圖上
//爆管分析成功function BurstPipelineAnalyst_processCompleted(BurstPipelineAnalystEventArgs) {var result = BurstPipelineAnalystEventArgs.result;//上下游中受爆管位置影響的弧段IDvar edgeID = result.edges;//爆管分析中受爆管位置影響的上下游的關(guān)鍵設(shè)施點(diǎn)IDvar criticalNodes = result.criticalNodes;queryBySQL(criticalNodes,edgeID);}//通過(guò)受影響的弧段和關(guān)鍵設(shè)施點(diǎn)ID查詢(xún)到對(duì)應(yīng)的對(duì)象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) {//受影響的設(shè)施點(diǎn)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);}}}分析結(jié)果展示:圖中可以該點(diǎn)爆管時(shí),需要關(guān)閉29號(hào)和57號(hào)閥門(mén)。
本文所有到的數(shù)據(jù)和代碼,請(qǐng)?jiān)L問(wèn)如下地址下載:
https://download.csdn.net/download/supermapsupport/11762243
總結(jié)
- 上一篇: OpenCVSharp 基于特征的图像
- 下一篇: H.264视频编解码器与H.265编解码