日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二维爆管分析

發布時間:2024/3/24 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维爆管分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者: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、 確定爆管位置,通過畫點控件畫的點位來模擬爆管的位置

//畫點控件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;//上下游中受爆管位置影響的弧段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

總結

以上是生活随笔為你收集整理的二维爆管分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。