/// <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. 【转】HiveQL:对数据定义的学习

    1.Hive中的数据库: 它是表的一个目录或者命名空间,用来避免表命名冲突,我们通常使用数据库来将生产表组织成逻辑组. 基本命令: (1)创建一个数据库(如果不存在该数据库): create data ...

  2. centos7安装python3

    下载python3.5.2 wget http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tgz 如果提示错误可能是wget没有安装,用yun -y i ...

  3. Redis学习笔记3-Redis5个可执行程序命令的使用

    在redis安装文章中,说到安装好redis后,在/usr/local/bin下有5个关于redis的可执行程序.下面关于这5个可执行程序命令的详细说明. redis-server Redis服务器的 ...

  4. [Django]登陆界面以及用户登入登出权限

    前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF  = 'www.urls'# ...

  5. 闪电动画模拟(Dielectric Breakdown Model)附源码

    当两个物体之间存在较大的电势差时会出现放电现象,比如生活中常见的闪电现象,闪电形成的条件就是云层积累了大量负电荷之后与地面之间形成了强大的电势差.目前关于闪电建模的方法比较少,下面介绍一种利用电介击穿 ...

  6. Js 遍历json对象所有key及根据动态key获取值

    var obj = {}; for(var k in obj) { //遍历对象,k即为key,obj[k]为当前k对应的值 console.log(obj[k]); } 文章来自:https://z ...

  7. [译]Spring构建微服务

    此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...

  8. 微信小程序之知乎日报

    上一次的<微信小程序之小豆瓣图书>制作了一个图书的查询功能,只是简单地应用到了网络请求,其他大多数小程序应有的知识.而本次的示例是知乎日报,功能点比较多,页面也比上次复杂了许多.在我编写这 ...

  9. 使用PhpDocumentor生成文档

    一,网站根目录执行 $ composer require --dev phpdocumentor/phpdocumentor 二,进入vendor/bin/目录执行 $phpdoc -d D:\ser ...

  10. JavaScript实现计算两个日期之间的天数

    以“yyyy-MM-dd”格式为例,现在有两个日期,分别为“2006-01-01”,“2007-05-20”. 1.调用Date.parser()方法,将字符串格式的时间戳转换为Date类型时间对象: ...