部分参照esri的官方例子,理解下各个参数,对照自己的NetWorkDatase创建方式(在arcmap中),多试试代码就调好了。

/// <summary>

        /// 创建NetWorkDataset

        /// </summary>

        /// <returns>INetworkDataset.</returns>

        public INetworkDataset CreateNetWorkDataset()

        {

            log.WriteLog("开始创建NetWorkDataset...");

            //Create a new empty data element for a buildable network dataset.

            IDENetworkDataset2 deNetworkDataset = new DENetworkDatasetClass();

            deNetworkDataset.Buildable = true;

            string sNDPath = Functions.g_WorkSpacePath + Functions.g_ROAD + "_ND.nd\\";

            if (System.IO.Directory.Exists(sNDPath))

            {

                try

                {

                    string[] strTemp = System.IO.Directory.GetFiles(sNDPath); //要先删除其下的所有子文件,然后删除目录,否则报错:System.IO.IOException: 目录不是空的

                    foreach (string str in strTemp)

                    {

                        System.IO.File.Delete(str);

                    }

                    System.IO.Directory.Delete(sNDPath);

                }

                catch (System.Exception ex)

                {

                    log.WriteLog(sNDPath + "已存在,删除失败!");

                    return null;

                }

            }

            // Open the shapefile and cast to the IGeoDataset interface.

            IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass() asIWorkspaceFactory2;

            IWorkspace workspace = workspaceFactory.OpenFromFile(Functions.g_WorkSpacePath, );

            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

            IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(Functions.g_ROAD);

            IGeoDataset geoDataset = (IGeoDataset)featureClass;

            deNetworkDataset.NetworkType = esriNetworkDatasetType.esriNDTShapefile;

            // Copy the shapefile's extent and spatial reference to the network dataset data element.

            IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNetworkDataset;

            deGeoDataset.Extent = geoDataset.Extent;

            deGeoDataset.SpatialReference = geoDataset.SpatialReference;

            IDataElement dataElement = (IDataElement)deNetworkDataset;  // Specify the name of the network dataset.

            dataElement.Name = Functions.g_ROAD + "_ND";

            // Specify the network dataset's elevation model.

            deNetworkDataset.ElevationModel = esriNetworkElevationModel.esriNEMNone;

            // Create an EdgeFeatureSource object and point it to the Streets feature class.

            INetworkSource edgeNetworkSource = new EdgeFeatureSourceClass();

            edgeNetworkSource.Name = Functions.g_ROAD;

            edgeNetworkSource.ElementType = esriNetworkElementType.esriNETEdge;

            // Set the edge feature source's connectivity settings.

            IEdgeFeatureSource edgeFeatureSource = (IEdgeFeatureSource)edgeNetworkSource;

            edgeFeatureSource.UsesSubtypes = false;

            edgeFeatureSource.ClassConnectivityGroup = ;

            edgeFeatureSource.ClassConnectivityPolicy =esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;

            IArray sourceArray = new ArrayClass();

            sourceArray.Add(edgeNetworkSource);

            deNetworkDataset.Sources = sourceArray;

            IArray attributeArray = new ArrayClass();

            IEvaluatedNetworkAttribute evalNetAttr;

            INetworkAttribute2 netAttr2;

            INetworkFieldEvaluator netFieldEval;

            INetworkConstantEvaluator netConstEval;

            // Create an EvaluatedNetworkAttribute object and populate its settings.

            evalNetAttr = new EvaluatedNetworkAttributeClass();

            netAttr2 = (INetworkAttribute2)evalNetAttr;

            netAttr2.Name = "Time"; //按秒算的时间消耗

            netAttr2.UsageType = esriNetworkAttributeUsageType.esriNAUTCost;

            netAttr2.DataType = esriNetworkAttributeDataType.esriNADTDouble;

            netAttr2.Units = esriNetworkAttributeUnits.esriNAUSeconds;

            netAttr2.UseByDefault = false;

            // Create evaluator objects and set them on the EvaluatedNetworkAttribute object.

            netFieldEval = new NetworkFieldEvaluatorClass();

            netFieldEval.SetExpression("a", "。。。。。。。。。。。"); //表达式不能出错

            evalNetAttr.set_Evaluator(edgeNetworkSource,esriNetworkEdgeDirection.esriNEDAlongDigitized, (INetworkEvaluator)netFieldEval);

            netFieldEval = new NetworkFieldEvaluatorClass();

            netFieldEval.SetExpression("a", "。。。。。。。。。");

            evalNetAttr.set_Evaluator(edgeNetworkSource,esriNetworkEdgeDirection.esriNEDAgainstDigitized, (INetworkEvaluator)netFieldEval);

            netConstEval = new NetworkConstantEvaluatorClass();

            netConstEval.ConstantValue = false;

            evalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETEdge, (INetworkEvaluator)netConstEval);

            evalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETJunction, (INetworkEvaluator)netConstEval);

            evalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETTurn, (INetworkEvaluator)netConstEval);

            // Add the attribute to the array.

            attributeArray.Add(evalNetAttr);

            deNetworkDataset.Attributes = attributeArray;

            //// Create a new UID that references the NetworkDatasetWorkspaceExtension. 

            UID ndWorkspaceExtensionUID = new UIDClass();

            ndWorkspaceExtensionUID.Value ="esriGeoDatabase.NetworkDatasetWorkspaceExtension";

            // Get the workspace extension and create the network dataset based on the data element.

            IWorkspaceExtensionManager workspaceExtensionManager = (IWorkspaceExtensionManager)workspace;

            IWorkspaceExtension workspaceExtension = workspaceExtensionManager.FindExtension(ndWorkspaceExtensionUID);

            IDatasetContainer3 datasetContainer2 = (IDatasetContainer3)workspaceExtension;

            IDEDataset deDataset = (IDEDataset)deNetworkDataset;

            IDataset ds = datasetContainer2.CreateDataset(deDataset);

            INetworkDataset networkDataset = (INetworkDataset)ds;

            log.WriteLog("NetWorkDataset创建完成,Building Network...");

            // Once the network dataset is created, build it.                                      

            INetworkBuild networkBuild = (INetworkBuild)networkDataset;

            networkBuild.BuildNetwork(geoDataset.Extent);

            log.WriteLog("BuildNetwork完成!");

            return networkDataset;

        }

创建NetWorkDataset---Shapefile篇的更多相关文章

  1. 创建型模式篇(工厂模式Factory Pattern)

    一.工厂模式(Factory Pattern) 1.定义: 在软件系统,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.提供一种封 ...

  2. 创建型模式篇(单例模式Single Pattern)

    一.单例模式(Singleton Pattern) 单例模式要求一个类只能有一个实例,并且提供了一个全局的访问点. 比如说,中国主席的职位是Singleton,法律规定主席选举,任何时间只能有一个主席 ...

  3. Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)

    Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...

  4. 创建NetWorkDataset---FileGDB篇

    /// <summary> /// 创建NetWorkDataset /// </summary> /// <returns>INetworkDataset.< ...

  5. 第6篇-Java方法新栈帧的创建

    在 第2篇-JVM虚拟机这样来调用Java主类的main()方法 介绍JavaCalls::call_helper()函数的实现时提到过如下一句代码: address entry_point = me ...

  6. 第7篇-为Java方法创建栈帧

    在 第6篇-Java方法新栈帧的创建 介绍过局部变量表的创建,创建完成后的栈帧状态如下图所示. 各个寄存器的状态如下所示. // %rax寄存器中存储的是返回地址 rax: return addres ...

  7. 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下

    为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?低版本中不是至少可以存储4个汉字吗?原因这个问题仍然与编码类型有关.ArcGIS 10.2 以及更早的版本,ArcGIS ...

  8. 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  9. android手势创建及识别

    使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到的是android.gesture包,具体的例子参考的是S ...

随机推荐

  1. Linux简介及常用命令使用3--vi编辑器

    1.进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 [新建文件]vi +n filename :打开文件,并将光标置于第n行首 [比如:某个shell报错的行数时使用] ...

  2. Nginx服务状态监控

    在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: [ ...

  3. [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)

    在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...

  4. Winform无边框窗体的移动和阴影

    //窗体移动API [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport ...

  5. VPS搭建VPN、BLOG

    FQ的正确姿势,你掌握了多少?老司机带你去墙外看看,来开车了坐稳! 购买VPS主机(服务端) 推荐性价比较高的VPS 搬瓦工https://bandwagonhost.com/ 上面的链接如果你打不开 ...

  6. 修改eclipse的自动完成功能

    修改eclipse的自动完成功能   周银辉 用eclipse时还是比较习惯Visual Studio那样的敲一个字母就弹出自动完成框,而不是总要等到敲.号,其实可以设置的: 在preferences ...

  7. eclipse的几个快捷键

    Alt / 自动补全 Ctrl Shift F 整理代码 Ctrl / 注释或取消注释 Ctrl 鼠标移到变量或类名上 转到声明/实现的接口/返回类型等 Ctrl Shift O import所有缺失 ...

  8. thrift 一个有意思的特性:Class名称无关性

    最近开发的一个项目,后端采用thrift框架来提供rpc服务(java语言实现),然后前端采用php语言来生成thrift client调用后台RPC服务.由于某些原因,上周我把thrift定义文件中 ...

  9. 谈谈计算机上的那些存储器-Memory Hierarchy

    文章首发于浩瀚先森博客http://www.guohao1206.com/2016/12/07/1248.html 说到计算机上的存储器,很多人第一反应是硬盘,然后是内存. 其实在计算机上除了硬盘和内 ...

  10. 微信支付开发(1) JS API支付

    关键字:微信支付 微信支付v3 jsapi支付 统一支付 Native支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv3 ...