在现实生活中gis者开发的时候难免需要用到网络分析的功能,为了更好节省时间,加快开发的效率。故在此共享当时AE开发所用的网络分析的源码。愿对你有所帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Catalog;
using ESRI.ArcGIS.CatalogUI;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.NetworkAnalysis;
using ESRI.ArcGIS.NetworkAnalyst;
using ESRI.ArcGIS.Display;
using System.IO;namespace exp
{public partial class network : Form{private INAContext m_NAContext;//网络分析上下文private INetworkDataset networkDataset;//网络数据集private IFeatureWorkspace pFWorkspace;private IFeatureClass inputFClass;//打开stops数据集private IFeatureDataset featureDataset;private bool networkanalasia = false;//判断是否点击新路线按钮,进入添加起点阶段private int clickedcount = 0;//mapcontrol加点显示点数private IActiveView m_ipActiveView;private IGraphicsContainer PGC;private IMap m_ipMap;public network(){InitializeComponent();}private void initialize(){axMapControl1.ActiveView.Clear();axMapControl1.ActiveView.Refresh();//获取当前应用程序的目录名称string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;int t;for (t = 0; t < path.Length; t++){if (path.Substring(t, 14) == "NetworkAnalasis"){break;}}//根据目录名称获取数据存取路径string name = path.Substring(0, t - 1) + "\\TestData\\Test.gdb";//打开工作空间pFWorkspace = OpenWorkspace(name) as IFeatureWorkspace;//打开网络数据集networkDataset = OpenNetworkDataset(pFWorkspace as IWorkspace, "street_ND", "test");//创建网络分析上下文,建立一种解决关系m_NAContext = CreateSolverContext(networkDataset);//打开数据集inputFClass = pFWorkspace.OpenFeatureClass("stops");//TEST_ND_JUNCTIONS图层IFeatureLayer vertex = new FeatureLayerClass();vertex.FeatureClass = pFWorkspace.OpenFeatureClass("Test_ND_Junctions");vertex.Name = vertex.FeatureClass.AliasName;axMapControl1.AddLayer(vertex,0);//street图层IFeatureLayer road3;road3 = new FeatureLayerClass();road3.FeatureClass = pFWorkspace.OpenFeatureClass("street");road3.Name = road3.FeatureClass.AliasName;axMapControl1.AddLayer(road3, 0);//为networkdataset生成一个图层,并将该图层添加到axmapcontrol中ILayer pLayer;//网络图层INetworkLayer pNetworkLayer;pNetworkLayer = new NetworkLayerClass();pNetworkLayer.NetworkDataset = networkDataset;pLayer = pNetworkLayer as ILayer;pLayer.Name = "Network Dataset";axMapControl1.AddLayer(pLayer, 0);//生成一个网络分析图层并添加到axmaptrol1中ILayer layer1;INALayer nalayer = m_NAContext.Solver.CreateLayer(m_NAContext);layer1 = nalayer as ILayer;layer1.Name = m_NAContext.Solver.DisplayName;axMapControl1.AddLayer(layer1, 0);m_ipActiveView = axMapControl1.ActiveView;m_ipMap = m_ipActiveView.FocusMap;PGC = m_ipMap as IGraphicsContainer;}//打开工作空间public IWorkspace OpenWorkspace(string strGDBName){IWorkspaceFactory workspaceFactory;workspaceFactory = new FileGDBWorkspaceFactoryClass();return workspaceFactory.OpenFromFile(strGDBName, 0);}//打开网络数据集public INetworkDataset OpenNetworkDataset(IWorkspace networkDatasetWorkspace, System.String networkDatasetName, System.String featureDatasetName){if (networkDatasetWorkspace == null || networkDatasetName == "" || featureDatasetName == null){return null;}IDatasetContainer3 datasetContainer3 = null;IFeatureWorkspace featureWorkspace = networkDatasetWorkspace as IFeatureWorkspace;featureDataset = featureWorkspace.OpenFeatureDataset(featureDatasetName);IFeatureDatasetExtensionContainer featureDatasetExtensionContainer = featureDataset as IFeatureDatasetExtensionContainer;IFeatureDatasetExtension featureDatasetExtension = featureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);datasetContainer3 = featureDatasetExtensionContainer as IDatasetContainer3;if (datasetContainer3 == null)return null;IDataset dataset = datasetContainer3.get_DatasetByName(esriDatasetType.esriDTNetworkDataset, networkDatasetName);return dataset as INetworkDataset;}//创建网络分析上下文public INAContext CreateSolverContext(INetworkDataset networkDataset){//获取创建网络分析上下文所需的IDENETWORKDATASET类型参数IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset);INASolver naSolver;naSolver = new NARouteSolver();INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.Name) as INAContextEdit;contextEdit.Bind(networkDataset, new GPMessagesClass());return contextEdit as INAContext;return contextEdit as INAContext;}//得到创建网络分析上下文所需的IDENETWORKDATASET类型参数public IDENetworkDataset GetDENetworkDataset(INetworkDataset networkDataset){//将网络分析数据集QI添加到DATASETCOMPOENTIDatasetComponent dstComponent;dstComponent = networkDataset as IDatasetComponent;//获得数据元素return dstComponent.DataElement as IDENetworkDataset;}private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e){if (networkanalasia == true){IPointCollection m_ipPoints;//输入点集合IPoint ipNew;m_ipPoints = new MultipointClass();ipNew = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);object o = Type.Missing;m_ipPoints.AddPoint(ipNew, ref o, ref o);CreateFeature(inputFClass, m_ipPoints);//或者用鼠标点击最近点//把最近的点显示出来IElement element;ITextElement textelement = new TextElementClass();element = textelement as IElement;ITextSymbol textSymbol = new TextSymbol();textelement.Symbol = textSymbol;clickedcount++;textelement.Text = clickedcount.ToString();element.Geometry = m_ipActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);PGC.AddElement(element, 0);m_ipActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}}//获取距离鼠标点击最近的点public void CreateFeature(IFeatureClass featureClass, IPointCollection PointCollection){//是否为点图层if (featureClass.ShapeType != esriGeometryType.esriGeometryPoint){return;}//创建点要素for (int i = 0; i < PointCollection.PointCount; i++){IFeature feature = featureClass.CreateFeature();feature.Shape = PointCollection.get_Point(i);IRowSubtypes rowSubtypes = (IRowSubtypes)feature;feature.Store();}}private void axMapControl1_OnDoubleClick(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnDoubleClickEvent e){}private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e){networkanalasia = true;axMapControl1.CurrentTool = null;ITable pTable = inputFClass as ITable;pTable.DeleteSearchedRows(null);//提取路径前,删除上一次路径route网络上下文IFeatureClass routesFC;routesFC=m_NAContext.NAClasses.get_ItemByName("Routes") as IFeatureClass;ITable pTable1 = routesFC as ITable;pTable1.DeleteSearchedRows(null);//提取路径前,删除上一次路径Stops网络上下文INAClass stopsNAClass = m_NAContext.NAClasses.get_ItemByName("Stops") as INAClass;ITable ptable2=stopsNAClass as ITable;ptable2.DeleteSearchedRows(null);//提取路径前,删除上一次barries网络上下文INAClass barriesNAClass = m_NAContext.NAClasses.get_ItemByName("Barriers") as INAClass;ITable pTable3 = barriesNAClass as ITable;pTable3.DeleteSearchedRows(null);//提取路径前,删除上次路径polylineIFeatureClass getroute = pFWorkspace.OpenFeatureClass("get_route");ITable ptable_polyline = getroute as ITable;ptable_polyline.DeleteSearchedRows(null);PGC.DeleteAllElements();clickedcount = 0;axMapControl1.Refresh();}private void toolStripSplitButton2_ButtonClick(object sender, EventArgs e){IGPMessages gpMessages = new GPMessagesClass();loadNANetworkLocations("Stops", inputFClass, 80);INASolver naSlover = m_NAContext.Solver;naSlover.Solve(m_NAContext, gpMessages, null);//解决完后,删除图层内容ITable pTable_inputFClass = inputFClass as ITable;pTable_inputFClass.DeleteSearchedRows(null);axMapControl1.Refresh();}public void loadNANetworkLocations(string strNAClassName,IFeatureClass inputFC,double snapTolerance){INAClass naClass;INamedSet classes;classes =m_NAContext.NAClasses;naClass=classes.get_ItemByName(strNAClassName) as INAClass;//删除naClasses中添加的项naClass.DeleteAllRows();//加载网络分析对象,设置容差值INAClassLoader classLoader=new NAClassLoader();classLoader.Locator=m_NAContext.Locator;if (snapTolerance>0)classLoader.Locator.SnapTolerance=snapTolerance;classLoader.NAClass=naClass;//创建INAclassFieldMap,用于字段映射INAClassFieldMap fieldMap;fieldMap=new NAClassFieldMap();//加载网络分析类int rowsln=0;int rowsLocated=0;IFeatureCursor featureCursor=inputFC.Search(null,true);classLoader.Load((ICursor)featureCursor,null,ref rowsln,ref rowsLocated);((INAContextEdit)m_NAContext).ContextChanged();}}
}

说明:源码来源于某本书,但是我不太记得某本书的名字了。代码是自己手打的,如果有错误请进行纠正。

ArcEngine开发--网络分析相关推荐

  1. ArcEngine开发中“错误类型****未定义构造函数”

    问题 在ArcEngine开发的时候,在编译时,发现出现这样的错误,出错的地方在实例化一个对象的时候. 比如: ISpatialReference a = new UnknownCoordinateS ...

  2. vs2008下如何部署arcengine开发的程序

    说实话本想搞WPF+ArcEngine开发的,环境都搭建好了,突然发现貌似有很多授权的问题,唯恐部署软件后不能在其它客户端上使用,而且是项目开发,于是决定先暂时放下这个想法,待联系做研究性系统时再予以 ...

  3. ARCENGINE开发经典贴(转)

    为什么80%的码农都做不了架构师?>>>    使用ArcGIS Engine 开发自定义GIS应用: 第一部分:使用ArcGIS Engine 发布自定义GIS应用软件-全面了解A ...

  4. arcengine 开发经典帖(转)

    link: http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=25575&page=1&extra= 使用ArcGIS Engine ...

  5. ARCENGINE开发经典贴

    使用ArcGIS Engine 开发自定义GIS应用: 第一部分:使用ArcGIS Engine 发布自定义GIS应用软件-全面了解ArcGIS Engine的产品. 第二部分:ArcEngine9. ...

  6. ArcEngine开发体验(附许可)

    ArcGIS Engine Developer Guide ArcGIS9.0开发文档<Engine_Developers_Guide.pdf>376 ,花了两三天看完了. guide特点 ...

  7. arcengine开发如何获取ipolygon的中心点_如何保证倾斜摄影建模效果和建模精度?...

    一.前言 随着三调工作逐步完结,国家自然资源部开始部署新的地理信息战略任务--实景三维中国建设,中国的地信行业将迎来新的篇章.实景三维中国的实施将带来许多机遇与挑战,智慧城市项目是其中一个绕不开的话题 ...

  8. ArcEngine开发 退出系统报错

    主要原因是没有释放AO资源 public class Form1 : System.Windows.Forms.Form {     private ESRI.ArcGIS.esriSystem.IA ...

  9. ArcEngine开发之自定义工具

    1.在项目中添加基于Base Command等的类,可改变命名空间名称. 2.引用:命名空间.类名称: 实例: using System; using System.Collections.Gener ...

最新文章

  1. idea修改java和jsp不起作用_使用IDEA编写jsp时EL表达式不起作用的问题及解决方法...
  2. 4K60帧视频实时抠图,连头发丝都根根分明
  3. hibernate基本映射文件
  4. Dart 基礎 - 4
  5. 公司不能把笔记导出去真操蛋
  6. NETBEUI协议的优点及应用
  7. eNSP 配置OSPF
  8. nacos is starting with cluster
  9. 免费开源的工程师项目管理系统
  10. 微信小程序 录像 录视频
  11. 工程师必备硬件EMC设计规范
  12. 《剑指 Offer》题目汇总
  13. ppt密码怎么设置,ppt权限密码如何破解?
  14. linux 下动态链接库的创建与使用——dlopen,dlsym
  15. STM32F103+W5500,HAL库
  16. 【LOJ】#2289. 「THUWC 2017」在美妙的数学王国中畅游
  17. 小米布局智能家居,试产首款智能插座
  18. IDEA中三种快速实现接口的快捷键
  19. [C/C++] C语言基础知识:%X是什么意思(未完待续)
  20. HTML:给自己设计一个简单的专属网页音乐播放器

热门文章

  1. 浅谈智能手机的操作系统 第一期
  2. 分享一个查看电脑卡顿原因的神器Process Explorer
  3. “熊猫烧香”作者被捕后写的有关熊猫感想
  4. 安装了windows 2012 遗憾的是不可以使用free launch bar
  5. 付源泉老师 企业人才管理专家
  6. ad15原理图中变压器种类_最简单的变压电路图大全(十一款最简单的变压电路设计原理图详解)...
  7. Oracle 分页查询 rownum 和 offset
  8. 如何正确进行oa软件选型
  9. 计算机控制原理跟自动控制原理,建筑设备自动控制原理
  10. 【STM32】详解超声波测距模块工作原理