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;
    
            }
  • 相关阅读:
    Android传递中文参数方法(之一)
    配置类与yaml
    修改ip失败,一个意外的情况处理方法
    oracle 自增序列与触发器
    Excel导入数据带小数点的问题
    数据库null与空的区别
    小米手机无法打开程序报错Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication的解决办法
    gradle类重复的问题解决方法
    windowSoftInputMode属性讲解
    android studio 的配置
  • 原文地址:https://www.cnblogs.com/jhlong/p/5394410.html
Copyright © 2011-2022 走看看