zoukankan      html  css  js  c++  java
  • 创建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", 0);
    
                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 = 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", "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;
    
            }
  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/jhlong/p/5394410.html
Copyright © 2011-2022 走看看