创建NetWorkDataset---Shapefile篇
部分参照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篇的更多相关文章
- 创建型模式篇(工厂模式Factory Pattern)
一.工厂模式(Factory Pattern) 1.定义: 在软件系统,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.提供一种封 ...
- 创建型模式篇(单例模式Single Pattern)
一.单例模式(Singleton Pattern) 单例模式要求一个类只能有一个实例,并且提供了一个全局的访问点. 比如说,中国主席的职位是Singleton,法律规定主席选举,任何时间只能有一个主席 ...
- Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)
Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...
- 创建NetWorkDataset---FileGDB篇
/// <summary> /// 创建NetWorkDataset /// </summary> /// <returns>INetworkDataset.< ...
- 第6篇-Java方法新栈帧的创建
在 第2篇-JVM虚拟机这样来调用Java主类的main()方法 介绍JavaCalls::call_helper()函数的实现时提到过如下一句代码: address entry_point = me ...
- 第7篇-为Java方法创建栈帧
在 第6篇-Java方法新栈帧的创建 介绍过局部变量表的创建,创建完成后的栈帧状态如下图所示. 各个寄存器的状态如下所示. // %rax寄存器中存储的是返回地址 rax: return addres ...
- 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下
为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?低版本中不是至少可以存储4个汉字吗?原因这个问题仍然与编码类型有关.ArcGIS 10.2 以及更早的版本,ArcGIS ...
- 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- android手势创建及识别
使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到的是android.gesture包,具体的例子参考的是S ...
随机推荐
- hadoop2.2.0伪分布式搭建3--安装Hadoop
3.1上传hadoop安装包 3.2解压hadoop安装包 mkdir /cloud #解压到/cloud/目录下 tar -zxvf hadoop-2.2.0.tar.gz -C /cloud/ 3 ...
- BI cube的前世今生:商业智能BI为什么需要cube技术
企业中常常会出现这样一幕幕尴尬的场景: 企业的决策人员需要从不同的角度来审视业务,协助他们分析业务,例如分析销售数据,可能会综合时间周期.产品类别.地理分布.客户群类等多种因素来考量.IT人员在每一个 ...
- Selenium2(WebDriver)_如何判断WebElement元素对象是否存在
1. selenium中如果去寻找元素,而元素不存在的话,通常会抛出NoSuchElementException 导致测试失败,但有时候,我们需要去确保页面元素不存在,才是我们正确的验收条件下面的方法 ...
- Catalan数应用整理
应用一: codevs 3112 二叉树计数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个有n个结点的二叉树总共有 ...
- [No000078]Python3 字符串操作
#!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分 ...
- [No000067]Js中获取当前页面的滚动条纵坐标位置scrollTop
三种方法任选其一: var sTop = document.body.scrollTop+document.documentElement.scrollTop; var sTop = document ...
- alexkn android第一行代码-7.广播
0.Android 中的广播主要可以分为两种类型,标准广播和有序广播.标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的 广播接收器几乎都会在同一时刻接收到 ...
- 【.NET实战教程】北风网基于ASP.NET多层架构下的企业级进销存软件全程培训
.Net进销存系统详细课程大纲(开发工具采用VS2008+sqlsever2005) [小编提醒:现在学习的话,可以使用vs2012+sql 2008 学习的是思路,教学环境不一定要一模一样]1.项目 ...
- [原创翻译]Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial ...
- Centos6.5入侵清理
今天早上来,网站打不开.通过xshell打不开终端,很久才打开.发现内存占用率高达95%,loadavg 15 16 16 现状: 负载太高 15 15 ...