创建NetWorkDataset---FileGDB篇
/// <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篇的更多相关文章
- 创建型模式篇(工厂模式Factory Pattern)
一.工厂模式(Factory Pattern) 1.定义: 在软件系统,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.提供一种封 ...
- 创建型模式篇(单例模式Single Pattern)
一.单例模式(Singleton Pattern) 单例模式要求一个类只能有一个实例,并且提供了一个全局的访问点. 比如说,中国主席的职位是Singleton,法律规定主席选举,任何时间只能有一个主席 ...
- Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)
Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...
- 创建NetWorkDataset---Shapefile篇
部分参照esri的官方例子,理解下各个参数,对照自己的NetWorkDatase创建方式(在arcmap中),多试试代码就调好了. /// <summary> /// 创建NetWorkD ...
- 第6篇-Java方法新栈帧的创建
在 第2篇-JVM虚拟机这样来调用Java主类的main()方法 介绍JavaCalls::call_helper()函数的实现时提到过如下一句代码: address entry_point = me ...
- 第7篇-为Java方法创建栈帧
在 第6篇-Java方法新栈帧的创建 介绍过局部变量表的创建,创建完成后的栈帧状态如下图所示. 各个寄存器的状态如下所示. // %rax寄存器中存储的是返回地址 rax: return addres ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- android手势创建及识别
使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到的是android.gesture包,具体的例子参考的是S ...
- Android使用默认样式创建View的几个姿势
以下内容是分析安卓源码所得: 1: 使用默认样式创建View的方式, 源码文件 Button.Java 注:此文参考http://www.linzenews.com/ 中的内容所写,如侵删! 2: ...
随机推荐
- 遇到shell重定向的一个奇怪问题:'消失'的标准输入!
需求: 把找到的文件逐行输出,然后用rm在许可的情况下删除 前置准备: $ls rm.sh test1 test2 test3 test4 test5 test6 $cat rm.sh #! / ...
- java服务器端编程
由于要做手机端安卓程序,所以使用java来开发.后来又看了javaweb,觉得java还是很不错的,功能很强大,可以做很多事,最重要的是资源非常丰富,有很多开源的库框架之类. 最近用java做一个服务 ...
- Linux下定时执行脚本(转自Decode360)
文章来自:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html Decode360's Blog 老师(业精于勤而荒于嬉 ...
- Neutron 理解 (2): 使用 Open vSwitch + VLAN 组网 [Netruon Open vSwitch + VLAN Virutal Network]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- php 获取当前服务器 系统
引子: 今天遇到一个问题,当执行文件操作是,不同系统之间的命令是不同的 , 所以需要判断当前系统. $is_win = strtoupper(substr(PHP_OS,0,3))==='WIN'?1 ...
- 线程同步之 yield() wait()
yield()没有参数. sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,yield 方法使当前线程让出CPU占有权,但让出的时间是不可设定的.yiel ...
- jenkins,jmeter,ant持续集成
1.安装 jenkins, jmeter, ant 2.将 jmeter下extras中的 ant-jmeter-1.1.1.jar拷贝到ant的lib下面 3.将 jmeter下collapse ...
- python基础之编码问题
python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode--->utf-8(utf-16和u ...
- 一个仿windows泡泡屏保的实现
一个仿windows泡泡屏保的实现 有天看到有人在百度知道上问windows 泡泡屏保该怎么用C#做,一时有趣,就做了一个出来,对于其中几个要点总结如下: 一,屏保程序的制作要求 屏保程序的扩展名是. ...
- 2.0 (1)安装MongoDB
(官网:www.mongodb.com) ——————————(1)Mac安装MongoDB———————— 1)安装homebrew (官网地址,brew.sh) ruby -e "$(c ...