• 创建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;
    
            }
  • 相关阅读:
    Map根据key或者value排序
    docker部署Javaweb项目(jdk+tomcat+mysql)
    MySQL设置某一字段默认为0,但是插入数据化却显示为null
    文件下载
    JXLS导出Excel(模板导出)
    eclipse使用lombok
    Integer 类型数值判断相等的坑
    通用Mapper相关
    SSM配置Socket多线程编程(RFID签到实例)
    使用JSONObject遇到的问题,java.lang.NoClassDefFoundError: net/sf/json/JSONObject
  • 原文地址:https://www.cnblogs.com/jhlong/p/5394410.html
Copyright © 2020-2023  润新知