/// <summary>Creates an new (unbuilt) Network Dataset</summary> private void CreateBuildableNDS() { IDENetworkDataset2 deNetworkDataset = new DENetworkDatasetClass(); deNetworkDataset.Buildable = true; ((IDataElement)deNetworkDataset).Name = _ndsName; // Copy the feature dataset's extent and spatial reference to the network dataset IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNetworkDataset; deGeoDataset.Extent = _extent; deGeoDataset.SpatialReference = _spatialReference; deNetworkDataset.ElevationModel = esriNetworkElevationModel.esriNEMNone; deNetworkDataset.SupportsTurns = true; // General Network Directions GeneralNetworkDirectionInfo dirInfo = _xml.GeneralNetworkDirections(); if (dirInfo != null) { INetworkDirections netdir = new NetworkDirectionsClass(); netdir.LengthAttributeName = dirInfo.LengthAttr; netdir.DefaultOutputLengthUnits = dirInfo.LengthUnits; netdir.RoadClassAttributeName = dirInfo.RoadClassAttr; netdir.TimeAttributeName = dirInfo.TimeAttr; deNetworkDataset.Directions = netdir; } IArray sources = new ArrayClass(); foreach (INetworkSource ns in EnumerateNetworkSources()) { sources.Add(ns); } IArray attrs = new ArrayClass(); foreach (var na in _networkAttrs) { attrs.Add(na); } deNetworkDataset.Sources = sources; deNetworkDataset.Attributes = attrs; // Get the feature dataset extension and create the network dataset from the data element. IFeatureDatasetExtension fdExtension = ((IFeatureDatasetExtensionContainer)_osmDataset).FindExtension(esriDatasetType.esriDTNetworkDataset); _networkDataset = (INetworkDataset)((IDatasetContainer2)fdExtension).CreateDataset((IDEDataset)deNetworkDataset); }
/// <summary>Creates a temporary network dataset to use during turn feature creation</summary> private INetworkDataset CreateTempNDS() { const string TEMP_NDS_NAME = "TEMP_TURN_NDS"; IDENetworkDataset2 deNDS = new DENetworkDatasetClass(); deNDS.Buildable = true; ((IDataElement)deNDS).Name = TEMP_NDS_NAME; // Copy the feature dataset's extent and spatial reference to the network dataset IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNDS; deGeoDataset.Extent = _extent; deGeoDataset.SpatialReference = _spatialReference; deNDS.ElevationModel = esriNetworkElevationModel.esriNEMNone; deNDS.SupportsTurns = true; IArray sources = new ArrayClass(); foreach (INetworkSource ns in EnumerateNetworkSources()) { sources.Add(ns); } deNDS.Sources = sources; // Get the feature dataset extension and create the network dataset from the data element. IFeatureDatasetExtension fdExtension = ((IFeatureDatasetExtensionContainer)_osmDataset).FindExtension(esriDatasetType.esriDTNetworkDataset); INetworkDataset nds = (INetworkDataset)((IDatasetContainer2)fdExtension).CreateDataset((IDEDataset)deNDS); if (nds == null) { throw new ArgumentNullException("NetworkDataset"); } return(nds); }
public static IFeatureClass CreateFeatureClass(IGPValue gpFeatureClass, IGPEnvironmentManager environment, IFields fields = null) { if (gpFeatureClass == null) { throw new ArgumentException("Argument can not be null", "gpFeatureClass"); } if (environment == null) { throw new ArgumentException("Argument can not be null", "environment"); } IGeoProcessorSettings gpSettings = (IGeoProcessorSettings)environment; if (gpUtilities.Exists(gpFeatureClass)) { if (gpSettings.OverwriteOutput == true) { gpUtilities.Delete(gpFeatureClass); } else { throw new Exception("Output feature class already exists: " + gpFeatureClass.GetAsText()); } } IDEFeatureClass deFeatureClass = (IDEFeatureClass)gpUtilities.DecodeDETable(gpFeatureClass); if (deFeatureClass == null) { throw new Exception("Data Element decode return null"); } IObjectClassDescription objectClassDescription = (IObjectClassDescription) new FeatureClassDescriptionClass(); UID clsid = objectClassDescription.InstanceCLSID; UID extclsid = objectClassDescription.ClassExtensionCLSID; IDataElement dataElement = (IDataElement)deFeatureClass; if (dataElement.CatalogPath == null) { throw new ArgumentException("Catalog path is null", "CatalogPath"); } IFeatureClassName featureClassName = (IFeatureClassName)gpUtilities.CreateFeatureClassName(dataElement.CatalogPath); string path = dataElement.GetPath(); string name = dataElement.Name; IDEGeoDataset geoDataElement = (IDEGeoDataset)deFeatureClass; ISpatialReference spatialReference = geoDataElement.SpatialReference; IDETable deTable = (IDETable)deFeatureClass; string shapeFieldName = deFeatureClass.ShapeFieldName; Dictionary <string, IField> fieldBuilder = new Dictionary <string, IField>(); foreach (var input_fields in new IFields[] { deTable.Fields, fields }) { if (input_fields == null) { continue; } for (int i = 0; i < input_fields.FieldCount; i++) { IField field = deTable.Fields.get_Field(i); if (fieldBuilder.ContainsKey(field.Name.ToLower())) { fieldBuilder[field.Name.ToLower()] = (IField)((IClone)field).Clone(); } else { fieldBuilder.Add(field.Name.ToLower(), (IField)((IClone)field).Clone()); } if (field.Type == esriFieldType.esriFieldTypeGeometry) { shapeFieldName = field.Name; break; } } } IFields output_fields = new FieldsClass(); IFieldsEdit fields_edit = (IFieldsEdit)output_fields; foreach (IField field in fieldBuilder.Values) { fields_edit.AddField(field); if (field.Type == esriFieldType.esriFieldTypeGeometry) { IGeometryDefEdit defEdit = (IGeometryDefEdit)field.GeometryDef; defEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; } } string configKeyword = ((IGPString)environment.FindEnvironment(CONFIG_KEYWORD_PROP_NAME).Value).Value; //if (String.IsNullOrWhiteSpace(configKeyword)) configKeyword = "DEFAULTS"; IFeatureClass ret = null; if (featureClassName.FeatureDatasetName != null) { IFeatureDataset featureDataset = (IFeatureDataset)((IName)featureClassName.FeatureDatasetName).Open(); try { ret = featureDataset.CreateFeatureClass(name, output_fields, clsid, extclsid, esriFeatureType.esriFTSimple, shapeFieldName, configKeyword); } finally { Marshal.ReleaseComObject(featureDataset); } } else { IWorkspace workspace = (IWorkspace)((IName)((IDatasetName)featureClassName).WorkspaceName).Open(); try { IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; ret = featureWorkspace.CreateFeatureClass(name, output_fields, clsid, extclsid, esriFeatureType.esriFTSimple, shapeFieldName, configKeyword); } finally { Marshal.ReleaseComObject(workspace); } } return(ret); }
private INetworkDataset method_1(IFeatureDataset ifeatureDataset_1, string string_1) { int num; IGeoDataset dataset = (IGeoDataset)ifeatureDataset_1; ISpatialReference spatialReference = dataset.SpatialReference; IDENetworkDataset dataset2 = new DENetworkDatasetClass(); IDataElement element = (IDataElement)dataset2; IDEGeoDataset dataset3 = (IDEGeoDataset)dataset2; element.Name = string_1; dataset2.Buildable = true; dataset3.SpatialReference = spatialReference; IArray array = new ArrayClass(); for (num = 0; num < this.FeatureClassWraps.Count; num++) { if (this.FeatureClassWraps[num].IsUse) { INetworkSource source; IFeatureClass featureClass = this.FeatureClassWraps[num].FeatureClass; if (featureClass.ShapeType == esriGeometryType.esriGeometryPoint) { source = new JunctionFeatureSourceClass { Name = this.FeatureClassWraps[num].ToString() }; IJunctionFeatureSource source2 = (IJunctionFeatureSource)source; source2.ClassConnectivityPolicy = (esriNetworkJunctionConnectivityPolicy) this.FeatureClassWraps[num].NetworkConnectivityPolicy; if (this.ModifyConnectivity) { source2.ElevationFieldName = this.FeatureClassWraps[num].ElevationFieldName; } array.Add(source); } else if (featureClass.ShapeType == esriGeometryType.esriGeometryPolyline) { source = new EdgeFeatureSourceClass(); IEdgeFeatureSource source3 = (IEdgeFeatureSource)source; source.Name = this.FeatureClassWraps[num].ToString(); source3.ClassConnectivityGroup = 1; source3.ClassConnectivityPolicy = (esriNetworkEdgeConnectivityPolicy)this.FeatureClassWraps[num].NetworkConnectivityPolicy; if (this.ModifyConnectivity) { source3.FromElevationFieldName = this.FeatureClassWraps[num].FromElevationFieldName; source3.ToElevationFieldName = this.FeatureClassWraps[num].ToElevationFieldName; } array.Add(source); } } } dataset2.Sources = array; for (num = 0; num < this.iarray_0.Count; num++) { dataset2.Attributes.Add(this.iarray_0.get_Element(num)); } dataset2.SupportsTurns = this.bool_2; IFeatureDatasetExtensionContainer container = (IFeatureDatasetExtensionContainer)ifeatureDataset_1; IDatasetContainer2 container2 = (IDatasetContainer2)container.FindExtension(esriDatasetType.esriDTNetworkDataset); return((INetworkDataset)container2.CreateDataset((IDEDataset)dataset2)); }