/// <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;

            // Open the feature dataset and cast to the IGeoDataset interface.

            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");

            IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);

            IWorkspace workspace = workspaceFactory.OpenFromFile(@"E:\TEST.gdb", );

            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

            IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset("HOSP");

            IGeoDataset geoDataset = (IGeoDataset)featureDataset;

            deNetworkDataset.NetworkType = esriNetworkDatasetType.esriNDTGeodatabase;

            // 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";

            //删除已存在的dataset,否则再创建会报错

            IEnumDataset enumFeatureDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

            enumFeatureDataset.Reset();

            IDataset featureDataset2 = null;

            IEnumDataset enumDataset = null;

            while ((featureDataset2 = enumFeatureDataset.Next()) != null)

            {

                enumDataset = featureDataset.Subsets;

                enumDataset.Reset();

                IDataset dataset = null;

                while ((dataset = enumDataset.Next()) != null)

                {

                    if (dataset is INetworkDataset && dataset.Name == dataElement.Name && dataset.CanDelete())

                    {

                        dataset.Delete();

                        break;

                    }

                }

            }

            // 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", "aaaaaaaaaa"); //Shape_Length

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

            netFieldEval = new NetworkFieldEvaluatorClass();

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

            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;

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

            IFeatureDatasetExtensionContainer fdxContainer = (IFeatureDatasetExtensionContainer)featureDataset;

            IFeatureDatasetExtension fdExtension = fdxContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);

            IDatasetContainer2 datasetContainer2 = (IDatasetContainer2)fdExtension;

            IDEDataset deDataset = (IDEDataset)deNetworkDataset;

            INetworkDataset networkDataset = (INetworkDataset)datasetContainer2.CreateDataset(deDataset);

            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---FileGDB篇的更多相关文章

  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---Shapefile篇

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

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

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

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

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

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

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

  8. android手势创建及识别

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

  9. Android使用默认样式创建View的几个姿势

    以下内容是分析安卓源码所得: 1: 使用默认样式创建View的方式, 源码文件 Button.Java  注:此文参考http://www.linzenews.com/ 中的内容所写,如侵删! 2: ...

随机推荐

  1. Transaction详细介绍

    闲暇之时浏览技术站点时,看到了对事物写的很好的一篇文章,看完之后感觉讲的实在是太好了. 原文地址:http://my.oschina.net/huangyong/blog/160012 Transac ...

  2. git 中关于LF 和 CRLF 的问题

    git 中关于LF 和 CRLF 的转换问题注意: Windows下编辑器设置中,建议调整设置为Unix风格.(具体设置位置各种编辑器上不同,需要找找) 使用Git Bash进行命令行操作时,运行一下 ...

  3. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  4. 报表软件JS开发引用HTML DOM的windows对象

    HTML DOM是W3C标准(是HTML文档对象模型的英文缩写,Document Object Model for HTML). HTML DOM定义了用于HTML的一些列标准的对象,以及访问和处理H ...

  5. Neutron 理解 (4): Neutron OVS OpenFlow 流表 和 L2 Population [Netruon OVS OpenFlow tables + L2 Population]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  6. 小讲堂:在线编辑在Mobox文档管理软件中的意义

    今天我们来讨论一下,mobox文档管理软件中的在线编辑的这个功能,相信这个功能是用户在日常的文档维护中非常需要的. 文档管理软件的诸多功能中,在线编辑是一块很重要的功能点,因为在线编辑可以说是提高工作 ...

  7. QuickHit游戏

    一 项目需求 根据输入速率和正确率将玩家分为不同级别,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级(为了简单起见 ...

  8. load和get的延迟加载

    load和get方法的区别: Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象. 区别在于: 如果未能发现符合条件的记录,get方法返回nul ...

  9. php-设置关键词高亮的字符串处理函数

    /** * 设置关键词高亮的字符串处理函数 * @param [string] $str [要高亮的字符串] * @param array $word_arr [关键词] */function set ...

  10. 初学C#和MVC的一些心得,弯路,总结,还有教训(1)--语言的选择

    因为惰性,自制力,求知欲等各方面原因....一直没有学新技术,总感觉VB6凑合能用就凑合用.... 于是大概从05年开始,几乎每次新版的vs一发布,我就下载回来,然后安装,然后,,,,就扔那了.... ...