




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、最短路徑分析(源碼)namespace GisEditor/ <summary>/ 最短路徑分析/ </summary>public class ClsPathFinder private IGeometricNetwork m_ipGeometricNetwork; private IMap m_ipMap; private IPointCollection m_ipPoints; private IPointToEID m_ipPointToEID;
2、; private double m_dblPathCost =0; private IEnumNetEID m_ipEnumNetEID_Junctions; private IEnumNetEID m_ipEnumNetEID_Edges; private IPolyline m_ipPolyline; #region Public Function /返回和設置當前地圖 public IMap SetOrGet
3、Map set m_ipMap = value; getreturn m_ipMap; /打開幾何數據集的網絡工作空間 public void OpenFeatureDatasetNetwork(IFeatureDataset FeatureDataset) CloseWorkspace();
4、; if (!InitializeNetworkAndMap(FeatureDataset) Console.WriteLine( "打開network出錯"); /輸入點的集合 public IPointCollection StopPoints setm_ipPoints= value; getreturn
5、 m_ipPoints; /路徑成本 public double PathCost get return m_dblPathCost; /返回路徑的幾何體 public IPolyline PathPolyLine() IEIDInfo ipE
6、IDInfo; IGeometry ipGeometry; if(m_ipPolyline!=null)return m_ipPolyline; m_ipPolyline = new PolylineClass(); IGeometryCollection ipNewGeometryColl = m_ipPolyline as IGeometryCollection;&
7、#160; ISpatialReference ipSpatialReference = m_ipMap.SpatialReference; IEIDHelper ipEIDHelper = new EIDHelperClass(); ipEIDHelper.GeometricNetwork = m_ipGeometricNetwork; ipEIDHelper.OutputSpatialReferenc
8、e = ipSpatialReference; ipEIDHelper.ReturnGeometries = true; IEnumEIDInfo ipEnumEIDInfo = ipEIDHelper.CreateEnumEIDInfo(m_ipEnumNetEID_Edges); int count = ipEnumEIDInfo.Count; ipEnumEIDInfo.Reset(); for(int i =
9、0;i<count;i+) ipEIDInfo = ipEnumEIDInfo.Next(); ipGeometry = ipEIDInfo.Geometry; ipNewGeometryColl.AddGeometryCollection( ipGeometry as IGeometryCollection); return m_ip
10、Polyline; /解決路徑 public void SolvePath(string WeightName) try int intEdgeUserClassID; int intEdgeUserID; int int
11、EdgeUserSubID; int intEdgeID; IPoint ipFoundEdgePoint; double dblEdgePercent; /*PutEdgeOrigins方法的第二個參數要求是IEdgeFlag類型的數組, * 在VB等其他語言的代碼中,只需傳人該類型數
12、組的第一個元素即 * 可,但C#中的機制有所不同,需要作出如下修改:使用 * ITraceFlowSolverGEN替代ITraceFlowSolver */ ITraceFlowSolverGEN ipTraceFlowSolver = new TraceFlowSolverClass() as ITraceFlowSolverGEN;
13、0; INetSolver ipNetSolver = ipTraceFlowSolver as INetSolver; INetwork ipNetwork = m_ipGeometricNetwork.Network; ipNetSolver.SourceNetwork = ipNetwork; INetElements ipNetElements = ipNetwork as INetElements;
14、0; int intCount = m_ipPoints.PointCount; /定義一個邊線旗數組 IEdgeFlag pEdgeFlagList = new EdgeFlagClassintCount; for(int i = 0;i<intCount ;i+)
15、 INetFlag ipNetFlag = new EdgeFlagClass()as INetFlag; IPoint ipEdgePoint = m_ipPoints.get_Point(i); /查找輸入點的最近的邊線 m_ipPointToEID.GetNearestEdge(ipEdgePoint, out intEdgeID,out ipFoun
16、dEdgePoint, out dblEdgePercent); ipNetElements.QueryIDs( intEdgeID, esriElementType.esriETEdge, out intEdgeUserClassID, out intEdgeUserID,out intEdgeUserSubID); ipNetFlag.UserClassID = intEdgeUserClassID; ipNet
17、Flag.UserID = intEdgeUserID; ipNetFlag.UserSubID = intEdgeUserSubID; IEdgeFlag pTemp = (IEdgeFlag)(ipNetFlag as IEdgeFlag); pEdgeFlagListi=pTemp;
18、60; ipTraceFlowSolver.PutEdgeOrigins(ref pEdgeFlagList); INetSchema ipNetSchema = ipNetwork as INetSchema; INetWeight ipNetWeight = ipNetSchema.get_WeightByName(WeightName); INetSolverWeights ipNetSolverWeights = ipTraceFl
19、owSolver as INetSolverWeights; ipNetSolverWeights.FromToEdgeWeight = ipNetWeight;/開始邊線的權重 ipNetSolverWeights.ToFromEdgeWeight = ipNetWeight;/終止邊線的權重 object vaRes =new objectintCount-1; /通過findpath得到邊線和交匯點
20、的集合 ipTraceFlowSolver.FindPath(esriFlowMethod.esriFMConnected, esriShortestPathObjFn.esriSPObjFnMinSum, out m_ipEnumNetEID_Junctions,out m_ipEnumNetEID_Edges, intCount-1, ref vaRes); /計算元素成本&
21、#160; m_dblPathCost = 0; for (int i =0;i<vaRes.Length;i+) double m_Va =(double) vaResi; m_dblPathCost = m_dblPathCost + m_Va;
22、160; m_ipPolyline = null; catch(Exception ex) Console.WriteLine(ex.Message); #endregion #region Private Function /初始化幾何網絡
23、和地圖 private bool InitializeNetworkAndMap(IFeatureDataset FeatureDataset) IFeatureClassContainer ipFeatureClassContainer; IFeatureClass ipFeatureClass ; IGeoDataset ipGeoDataset; ILayer ipLayer ;
24、60; IFeatureLayer ipFeatureLayer; IEnvelope ipEnvelope, ipMaxEnvelope ; double dblSearchTol; INetworkCollection ipNetworkCollection = FeatureDataset as INetworkCollection; int count = ipNetworkCollection.GeometricNetworkCo
25、unt; /獲取第一個幾何網絡工作空間 m_ipGeometricNetwork = ipNetworkCollection.get_GeometricNetwork(0); INetwork ipNetwork = m_ipGeometricNetwork.Network; if(m_ipMap!=null) m_ipMap = new MapClass();
26、60; ipFeatureClassContainer = m_ipGeometricNetwork as IFeatureClassContainer; count = ipFeatureClassContainer.ClassCount; for(int i =0;i<count;i+) ipFeatureClass = ipFeatureCla
27、ssContainer.get_Class(i); ipFeatureLayer = new FeatureLayerClass(); ipFeatureLayer.FeatureClass = ipFeatureClass; m_ipMap.AddLayer( ipFeatureLay
28、er); count = m_ipMap.LayerCount; ipMaxEnvelope = new EnvelopeClass(); for(int i =0;i<count;i+) ipLayer = m_ipMap.get_Layer(i); ipFea
29、tureLayer = ipLayer as IFeatureLayer; ipGeoDataset = ipFeatureLayer as IGeoDataset; ipEnvelope = ipGeoDataset.Extent; ipMaxEnvelope.Union( ipEnvelope); m_ipPointToEID = new PointToEIDClass(); m_ipPointToEID.SourceMap = m_ipMap; m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork; double dblWidth = ipMaxEnvelope.W
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中政治議題中心教學法在提高學生信息獲取與處理能力方面的應用研究論文
- 初中語文名著閱讀教學中的閱讀策略與閱讀習慣養成研究論文
- 校園文化品牌傳播策略對小學生創新能力培養的影響研究論文
- 初中生科技展覽學習體驗與科學探究能力提升研究論文
- 基于問題導向的高中化學實驗創新能力培養研究論文
- 藝考生課程管理制度
- 小學語文《樹和喜鵲》課件
- 設備維修個人工作計劃
- 設備開箱檢驗記錄
- 2025年山東省濟寧市中考歷史模擬試卷(含答案)
- 基于AI的年度營銷策略創新
- 校園通創業計劃書
- 2025陜煤集團榆林化學有限責任公司招聘(300人)筆試參考題庫附帶答案詳解
- 臨床重癥患者坐式八段錦要點、適應人群、效果及注意事項
- 2024年四川省內江市資中縣小升初數學試卷
- 地理-2025年江西省中考第一次模擬考試(全解全析)
- 開轟趴館的創業計劃書
- 《基礎護理學(第七版)》考前強化模擬練習試題庫500題(含答案)
- 【MOOC】《算法設計與分析》(東北大學) 中國大學慕課答案
- 病案管理系統用戶使用手冊
- 國家開放大學《應用寫作(漢語)》形考任務1-6答案
評論
0/150
提交評論