实例介绍
最短路径分析 ,详细说明及源码 ,适合初学者学习
INet Solver ipNetSolver ipTrace Flow Solver as INetSolver; INetwork ipNetwork= m_ipGeometricNetwork Network ipNetSolver. Source Network= ipNetwork INetElements ipNet Elements=ipNetwork as INetElements int int Count =m_apPoints Point Count ∥定义一个边线旗数组 IEdgeFlagl pEdgeFlagList new EdgeFlag Class[int Count for(int i=0; i<intCount i ++) INet Flag ipNetFlag= new EdgeFlag ClassOas INetFlag: IPoint ipEdgePoint=m_apPoints. get_Point(i) ∥杳找输入点的最近的边线 m_ipPointToEiD GetNearestEdge(ipEdgePoint, out intEdgelD, out ipFoundEdgePoint, out dblEdgePercent); ipNetElements Query Ids( int EdgeD esri ElementType. esrietEdge out intEdge User ClassID, out int Edge ID, out intEdgeUserSubID) ipNetFlag. User ClassID= intEdgeUserClassID ipNetFlag UserID =intEdgeUserID ipNetFlag. UserSubID= intEdgeUserSubD IEdge Flag pTemp =(Edge Flag)(ipNetFlag as IEdge Flag) pEdgeFlaglist=pTemp; ipTrace Flow Solver. PutEdgeOrigins(ref pEdgeFlagList) INetSchema ipNetSchema= ipNetwork as INet Schema INet Weight ipNet Weight = ipNetSchema get_ Weight B yName(WeightName) INet Solver Weights ipNetSolver Weights= ip TraceFlow Solver as INetSolver Weights ipNetSolver Weights. FromToEdge Weight= ipNet Weight;/开始边线的权重 ipNetSolver Weights ToFromEdge Weight= ipNet Weight;/终止边线的杈重 bject vaRes =new object int Count-1; 通过 findpath得到边线和交汇点的集合 OTraceFlow Solver FindPath(esri Flow Method. esriFMConnected esriShortestPathObj Fn esriSPObjFnMinSum out m_ipEnumNetEID_Junctions, out m_ipEnumNetEID_Edges, int Count-1, ref vaRes); ∥计算成木 m dblPathCost=0 for(int i=0; i<vaRes Length; i ++ double m Va =(double) vaRes m dblPathCost= m dblPathCost + m Va; n catch(Exception ex) Console. Writeline(ex Message); #tendregion fregion private function ∥始化 private bool Initialize Network AndMap(FEature Dataset Feature Dataset) IFeature Class Container ip Feature Class Container IFeature Class ipFeature Class; I GeoDataset ip GeoDataset; LAyer ipLayer I Feature layer ip layer; Envelope ipEnvelope, ipMaxEnvelope double dblsearchTol INetwork Collection ip Network Collection Feature Dataset as INetwork Collection int count= ipNetworkCollection GeometricNetworkCount ∥取几何网络工作空间 m_ip GeometricNetwork ip Collection. get_GeometricNetwork(O) INetwork ipNetwork =m_ip GeometricNetwork Network f(m_ipMapl=null) m_ipMap = new MapClassO ipFeature ClassContainer= m_ip GeometricNetwork as IFeature ClassContainer count= ipFeature Class Container Class Count for(int i =0; K <count; i ++ ipFeature Class ip Feature Class Container. get_Class(i); ipFeatureLayer= new FeatureLayerClasso ipFeatureLayer. Feature Class ipFeature Class; m_ipMap AddLayer( ipFeature Layer) count =m_ipMap Layer Count ipMax Envelope new Envelope Class for(int i=0; K<count; i++ ipLayer=m_ipMap get_Layer(i) ipFeatureLayer= ipLayer as IFeatureLayer ipGeoDataset ipFeatureLayer as IGeoDataset; ipEnvelope ipGeoDataset Extent Max Envelope. Union( ip Envelope) m_ipPointToeid new PointToEIDClassO: m_ipPointToElD SourceMap=m_ipMap m_ipPointToEID GeometricNetwork=m_ip GeometricNetwork double dbl width= ipMaxEnvelope Width double dblheight ipMax Envelope height if( dbl Width> dblHeight) dblSearchTol= dblwidth/100 dblSearchTol dblHeight/100 m_ipPointToEID Snap Tolerance= dblSearchTol return true private void Close Workspace m_ipGeometricNetwork null apPoints null m_ipPointToEID= null; m_ipEnumNetEID_ Junctions= null; m_ipEnumNetEID_Edges null; m_ippoly line null; #endregion 备注: ClsPath Finder m_ipPath Finder; if( m_ipPath Finder==nu!/打开网络空间 m_ippathFinder new Cls Path Finder ipMap= this m_ Active View. FocusMap: ipLayer= ipMap get_Layer(O); ipFeatureLayer ipLayer as IFeatureLayer ipFdb= ipFeature Layer Feature Class Feature Dataset m_ipPath Finder. SetOrGetMap ipMap m_ipPath Finder Open Feature DatasetNetwork(ipFDB) private void View Map_ OnMouse Down(object sende ESRLArCGIS. Map Control IMap ControlEvents2_ On Mouse Down event e)∥/获取鼠标输入的点 IPoint inEw: if(m_apPoints==null m_appoints new MultipointClasso: m_ipPath Finder StopPoints =m_ipPoints ipNew View Map. Active View ScreenDisplay Display Transformation. ToMapPoint(ex, e y) object o =Type. Missing m_ipPoints Add Point(ipNew, ref o, ref o); m_ipPathFinder Solve Path(" Weight")!/解析路径 POlyline ipPoly Result=m_ paThfiNder; Path PolyLine(;/返回最短路径 本篇文章来源于GIS空间站转载请以链接形式注明出处网址: http://www.gissky.net/article/1606.htm 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论