最短路徑分析_第1頁
最短路徑分析_第2頁
最短路徑分析_第3頁
最短路徑分析_第4頁
最短路徑分析_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論