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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

二维爆管分析

發(fā)布時(shí)間:2024/3/24 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二维爆管分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者: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)模擬爆管的位置

//畫(huà)點(diǎn)控件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);//查詢(xún)爆管位置所在的弧段var queryParam, queryByGeometryParameters, queryService;queryParam = new SuperMap.REST.FilterParameter({name: "burstdata_Network@burstdata"});queryByGeometryParameters = new SuperMap.REST.QueryByDistanceParameters({queryParams: [queryParam],isNearest:true, //選擇最近查詢(xún),并且只返回一個(gè)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("爆管點(diǎn):"+BP);}}

爆管位置:

4、 設(shè)定爆管分析參數(shù)

var parameter = new SuperMap.REST.BurstPipelineAnalystParameters({sourceNodeIDs: sourceNodeIDs, //設(shè)施點(diǎn)ID數(shù)組edgeID: BP, //爆管弧段ID,既查詢(xún)弧段內(nèi)容nodeID: null, //爆管結(jié)點(diǎn)ID (注:edgeID 與 nodeID 不能同時(shí)使用)isUncertainDirectionValid: true //指定不確定流向是否有效});

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é)

以上是生活随笔為你收集整理的二维爆管分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。