当前位置: 首页 > news >正文

创建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, 0);

            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 = 1;

            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;

        }

 

转载于:https://www.cnblogs.com/jhlong/p/5394404.html

相关文章:

  • 获取验证码按钮点击后,一分钟内不可继续点击
  • Delphi Canvas的FillRect(const Rect: TRect) 函数的作用
  • B+/-Tree原理及mysql的索引分析
  • 关闭Rootless机制
  • 图像缩放算法
  • Effective C++笔记(三):资源管理
  • IOS开发之远程推送
  • Set的用法
  • 安卓手持智能POS端上能扫描开单的软件-店面销售开单系统
  • 等式 hash
  • ARDUINO W5100 WebClient 测试
  • iOS9横竖屏设置的处理方法
  • spark 性能优化
  • 第一阶段冲刺个人博客08
  • 【代码笔记】iOS-轮询弹出框
  • 【刷算法】求1+2+3+...+n
  • canvas 绘制双线技巧
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • css系列之关于字体的事
  • Django 博客开发教程 8 - 博客文章详情页
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • nodejs:开发并发布一个nodejs包
  • PAT A1050
  • Python 基础起步 (十) 什么叫函数?
  • SQL 难点解决:记录的引用
  • 缓存与缓冲
  • 基于游标的分页接口实现
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 跳前端坑前,先看看这个!!
  • 我从编程教室毕业
  • 小试R空间处理新库sf
  • 学习笔记TF060:图像语音结合,看图说话
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 走向全栈之MongoDB的使用
  • ​520就是要宠粉,你的心头书我买单
  • ​香农与信息论三大定律
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Git) gitignore基础使用
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Python第六天)文件处理
  • (二)正点原子I.MX6ULL u-boot移植
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (论文阅读11/100)Fast R-CNN
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***利用Ms05002溢出找“肉鸡