【原】ArcEngine中最短路径的实现(一)

最短路径分析属于ArcGIS的网络分析范畴。而ArcGIS的网络分析分为两类,分别是基于几何网络和网络数据集的网络分析。它们都可以实现最短路径功能。下面先介绍基于几何网络的最短路径分析的实现。以后会陆续介绍基于网络数据集的最短路径分析以及这两种方法的区别。

几何网络是一种特殊的特征要素类,由一系列不同类别的点要素和线要素(可以度量并能图形表达)组成的,可在FeatureDataset下面创建,可进行图形与属性的编辑。包括流向分析和追踪分析两大功能。主要接口是ITraceFlowSolver。我们先在一幅地图上做出一个几何网络才能进行最短路径分析。下面是主要的一些步骤(ArcMap帮助中琐碎的说明有三四十项,被我省略很多):
1、打开ArcCatalog,连接到包含地图的文件夹。
2、在空白处,右键新建一个“Personal GeoDatabase”。
3、在生成的Personal GeoDatabase上右键新建一个feature dataset。
4、双击Personal GeoDatabase进去,找到刚才new出的feature dataset,右键Import导入Feature Class(Single),选择要建立几何网络的图层或者shape文件。
5、然后再右键新建一个Geometric Network,选择从已存在的图元中建立几何网络。
6、打开ArcMap,把刚才建立的“Personal GeoDatabase Feature Class”添加到地图中,这样几何网络就建立好了。

这样我们就建立好一个几何网络了。我们现在要通过编程来实现最短路径,用到的接口主要有INetworkCollection,IGeometricNetwork,IPointToEID,ITraceFlowSolverGEN(它实现了ITraceFlowSolver的接口),INetSchema,IEIDHelper等。主要步骤如下:
1、获取几何网络工作空间
2、定义一个边线旗数组,把离点串最近的网络元素添加进数组
3、设置开始和结束边线的权重
4、进行路径分析
5、得到路径分析的结果
具体的程序太过繁琐、冗长了,这里不便贴出,可以打开这个链接查看源程序。http://www.cnblogs.com/3echo/archive/2008/01/24/865527.html

转载于:https://www.cnblogs.com/miao2009/archive/2009/06/02/ae_shortestpath.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于ArcEngine的C#最短路径可以通过以下步骤实现: 1. 创建一个ArcEngine地图应用程序项目。 2. 在项目添加一个AxMapControl控件,用于显示地图。 3. 在项目添加一个AxNetworkAnalystControl控件,用于执行网络分析。 4. 添加一个网络数据集作为地图的一部分,并将其加载到AxMapControl控件。 5. 在AxNetworkAnalystControl控件设置网络数据集。 6. 创建一个起点和终点,并将它们添加到AxNetworkAnalystControl控件。 7. 在AxNetworkAnalystControl控件设置分析参数,如分析类型、障碍物等。 8. 调用AxNetworkAnalystControl控件的Solve方法,执行最短路径分析。 9. 处理分析结果,并将路径显示在AxMapControl控件。 下面是一个简单的示例代码,用于执行最短路径分析: ``` INetworkAnalystExtension networkAnalystExtension = new NetworkAnalystExtensionClass(); AxMapControl mapControl = new AxMapControl(); AxNetworkAnalystControl networkAnalystControl = new AxNetworkAnalystControl(); IPoint startPoint = new PointClass(); IPoint endPoint = new PointClass(); // 设置网络数据集 INetworkDataset networkDataset = LoadNetworkDataset(); networkAnalystExtension.SetNetworkDataset(networkDataset); // 添加起点和终点 startPoint.PutCoords(10, 10); endPoint.PutCoords(20, 20); networkAnalystControl.AddLocation(startPoint, null, null); networkAnalystControl.AddLocation(endPoint, null, null); // 设置分析参数 INASolver naSolver = networkAnalystExtension.Solver; naSolver.AnalysisLocation = networkAnalystControl; naSolver.SolveAsync(null); // 处理分析结果 INAContext naContext = naSolver.Context; INAStreetDirections naStreetDirections = naContext.StreetDirections; IEnumNAStreetName naStreetNames = naStreetDirections.StreetNames; IEnumNAString naDirections = naStreetDirections.Directions; IEnumNAString naLengths = naStreetDirections.Lengths; ``` 注意:这只是一个简单的示例代码,实际的实现可能需要更多的代码和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值