ArcEngine+最短路径分析(C#源码)
更新时间:2023-11-07 18:17:01 阅读量: 教育文库 文档下载
using ESRI.ArcGIS.NetworkAnalysis; public class ClsPathFinder {
private IGeometricNetwork m_ipGeometricNetwork; private IMap m_ipMap;
private IPointCollection m_ipPoints; private IPointToEID m_ipPointToEID; private double m_dblPathCost =0;
private IEnumNetEID m_ipEnumNetEID_Junctions; private IEnumNetEID m_ipEnumNetEID_Edges; private IPolyline m_ipPolyline;
#region Public Function //返回和设置当前地图 public IMap SetOrGetMap {
set{ m_ipMap = value;} get{return m_ipMap;} }
//打开网络
public void OpenFeatureDatasetNetwork(IFeatureDataset FeatureDataset) {
CloseWorkspace();
if (!InitializeNetworkAndMap(FeatureDataset)) Console.WriteLine( \打开出错\ }
//输入点的集合
public IPointCollection StopPoints {
set{m_ipPoints= value;} get{return m_ipPoints;} }
//路径成本
public double PathCost {
get {return m_dblPathCost;} }
//返回路径
public IPolyline PathPolyLine() {
IEIDInfo ipEIDInfo; IGeometry ipGeometry;
if(m_ipPolyline!=null)return m_ipPolyline;
m_ipPolyline = new PolylineClass();
IGeometryCollection ipNewGeometryColl = m_ipPolyline as IGeometryCollection;
ISpatialReference ipSpatialReference = m_ipMap.SpatialReference; IEIDHelper ipEIDHelper = new EIDHelperClass(); ipEIDHelper.GeometricNetwork = m_ipGeometricNetwork; ipEIDHelper.OutputSpatialReference = ipSpatialReference; ipEIDHelper.ReturnGeometries = true;
IEnumEIDInfo ipEnumEIDInfo =
ipEIDHelper.CreateEnumEIDInfo(m_ipEnumNetEID_Edges); int count = ipEnumEIDInfo.Count; ipEnumEIDInfo.Reset(); for(int i =0;i ipEIDInfo = ipEnumEIDInfo.Next(); ipGeometry = ipEIDInfo.Geometry; ipNewGeometryColl.AddGeometryCollection( ipGeometry as IGeometryCollection); } return m_ipPolyline; } //解决路径 public void SolvePath(string WeightName) { try { int intEdgeUserClassID; int intEdgeUserID; int intEdgeUserSubID; int intEdgeID; IPoint ipFoundEdgePoint; double dblEdgePercent; /*C#中使用 *ITraceFlowSolverGEN替代ITraceFlowSolver */ ITraceFlowSolverGEN ipTraceFlowSolver = new TraceFlowSolverClass() as ITraceFlowSolverGEN; INetSolver ipNetSolver = ipTraceFlowSolver as INetSolver; INetwork ipNetwork = m_ipGeometricNetwork.Network; ipNetSolver.SourceNetwork = ipNetwork; INetElements ipNetElements = ipNetwork as INetElements; int intCount = m_ipPoints.PointCount; //定义一个边线旗数组 IEdgeFlag[] pEdgeFlagList = new EdgeFlagClass[intCount]; for(int i = 0;i INetFlag ipNetFlag = new EdgeFlagClass()as INetFlag; IPoint ipEdgePoint = m_ipPoints.get_Point(i); //查找输入点的最近的边线 m_ipPointToEID.GetNearestEdge(ipEdgePoint, out intEdgeID,out ipFoundEdgePoint, out dblEdgePercent); ipNetElements.QueryIDs( intEdgeID, esriElementType.esriETEdge, out intEdgeUserClassID, out intEdgeUserID,out intEdgeUserSubID); ipNetFlag.UserClassID = intEdgeUserClassID; ipNetFlag.UserID = intEdgeUserID; ipNetFlag.UserSubID = intEdgeUserSubID; IEdgeFlag pTemp = (IEdgeFlag)(ipNetFlag as IEdgeFlag); pEdgeFlagList=pTemp; } ipTraceFlowSolver.PutEdgeOrigins(ref pEdgeFlagList); INetSchema ipNetSchema = ipNetwork as INetSchema; INetWeight ipNetWeight = ipNetSchema.get_WeightByName(WeightName); INetSolverWeights ipNetSolverWeights = ipTraceFlowSolver as INetSolverWeights; ipNetSolverWeights.FromToEdgeWeight = ipNetWeight;//开始边线的权重 ipNetSolverWeights.ToFromEdgeWeight = ipNetWeight;//终止边线的权重 object [] vaRes =new object[intCount-1]; //通过findpath得到边线和交汇点的集合 ipTraceFlowSolver.FindPath(esriFlowMethod.esriFMConnected, esriShortestPathObjFn.esriSPObjFnMinSum, out m_ipEnumNetEID_Junctions,out m_ipEnumNetEID_Edges, intCount-1, ref vaRes); //计算成本 m_dblPathCost = 0; for (int i =0;i
正在阅读:
国开(中央电大)法学本科《国际公法》十年期末考试名词解释题库04-13
2015年MBA全国联考英语核心词汇44p - 图文10-07
爱立信初学者总结大全01-19
初中病句讲解(用于初一到初三)11-24
华科考研复试 激光技术答案06-24
小小班亲子课教案大全09-11
就业问答(个人浅见)12-18
三年级品德与社会《科学用水》教案03-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C#
- 路径
- ArcEngine
- 源码
- 分析
- 主板 维护解答题整理答案
- 文字处理
- 2010-2012年MBA英语作文真题
- 职业规划终稿(3)1
- 2014-2015学年高二下学期第一次阶段考试政治试题 Word版含答案
- 急救护理学试题(内含答案)
- 国外卫星导航应用标准综述
- 上海市住宅物业管理规定-打印
- 2015年05月25日阳阳的初中数学组卷解析
- 仿生轮足结合机器人结题报告 - 图文
- 管理人员安全知识复习题
- 河北省保定外国语学校2015-2016学年高一上学期12月段考英语试题
- 中央机关及其直属机构2013年度考试录用公务员公告解读
- 关于军人退役养老保险关系转移接续有关问题的通知(后财〔2012〕547号)
- 东南大学智能仪器往年试题
- 02津财社35号-关于转发《财政部 劳动保障部关于企业补充医疗保险有关问题的通知》的通知- 副本
- 2017高考精选病句30题综合训练和答案解析
- 《北京市软件和信息服务业“十二五”发展规划》
- 浙大培训心得体会
- 2018年秋部编版语文三年级上册全册3.句子专项及参考答案