public static Dictionary <int, KeyValuePair <string, IEnumInvalidObject> > TransferMapDataWithinExtents(IMap map, IFeatureWorkspace outputWorkspace, IFeatureDatasetName outputFeatureDatasetName, ESRI.ArcGIS.ADF.Web.Geometry.Envelope downloadDataExtent, ISpatialReference outputSpatialReference) { Dictionary <int, KeyValuePair <string, IEnumInvalidObject> > invalidObjects = new Dictionary <int, KeyValuePair <string, IEnumInvalidObject> >(); IWorkspaceName outWorkspaceName = GeodatabaseUtil.GetWorkspaceName((IWorkspace)outputWorkspace); List <IFeatureLayer> featureLayers = GetFeatureLayers(map); int counter = 0; foreach (IFeatureLayer featureLayer in featureLayers) { IFeatureClass inFeatureClass = featureLayer.FeatureClass; IDataset dataset = (IDataset)inFeatureClass; IFeatureWorkspace inFeatureWorkspace = (IFeatureWorkspace)dataset.Workspace; IEnvelope env = new ESRI.ArcGIS.Geometry.EnvelopeClass(); env.XMin = downloadDataExtent.XMin; env.YMin = downloadDataExtent.YMin; env.XMax = downloadDataExtent.XMax; env.YMax = downloadDataExtent.YMax; ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = env; spatialFilter.GeometryField = inFeatureClass.ShapeFieldName; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; IFeatureClassName outputFeatureClassName = GeodatabaseUtil.GetFeatureClassName(outWorkspaceName, dataset.Name); IEnumInvalidObject eInvalidObject = TransferData(inFeatureWorkspace, inFeatureClass, outputWorkspace, outputFeatureClassName, outputFeatureDatasetName, spatialFilter, outputSpatialReference); invalidObjects.Add(counter, new KeyValuePair <string, IEnumInvalidObject>(dataset.Name, eInvalidObject)); counter++; } return(invalidObjects); }
public static IFeatureClass CreateFeatureClass(object objectWorkspace, string name, ISpatialReference spatialReference, esriFeatureType featureType, esriGeometryType geometryType, IFields fields, UID uidCLSID, UID uidCLSEXT, string configWord) { // Check for invalid parameters. if (objectWorkspace == null) { throw new ArgumentNullException("[objectWorkspace] cannot be null"); } if (!((objectWorkspace is IFeatureWorkspace) || (objectWorkspace is IFeatureDataset))) { throw (new ArgumentNullException("[objectWorkspace] must be IFeatureWorkspace or IFeatureDataset")); } if (string.IsNullOrEmpty(name)) { throw (new ArgumentNullException("[name] cannot be empty")); } if ((objectWorkspace is IWorkspace) && (spatialReference == null)) { throw (new ArgumentNullException("[spatialReference] cannot be null for StandAlong FeatureClasses")); } // Set ClassID (if Null) if (uidCLSID == null) { uidCLSID = new UIDClass(); switch (featureType) { case (esriFeatureType.esriFTSimple): uidCLSID.Value = "{52353152-891A-11D0-BEC6-00805F7C4268}"; break; case (esriFeatureType.esriFTSimpleJunction): geometryType = esriGeometryType.esriGeometryPoint; uidCLSID.Value = "{CEE8D6B8-55FE-11D1-AE55-0000F80372B4}"; break; case (esriFeatureType.esriFTComplexJunction): uidCLSID.Value = "{DF9D71F4-DA32-11D1-AEBA-0000F80372B4}"; break; case (esriFeatureType.esriFTSimpleEdge): geometryType = esriGeometryType.esriGeometryPolyline; uidCLSID.Value = "{E7031C90-55FE-11D1-AE55-0000F80372B4}"; break; case (esriFeatureType.esriFTComplexEdge): geometryType = esriGeometryType.esriGeometryPolyline; uidCLSID.Value = "{A30E8A2A-C50B-11D1-AEA9-0000F80372B4}"; break; case (esriFeatureType.esriFTAnnotation): geometryType = esriGeometryType.esriGeometryPolygon; uidCLSID.Value = "{E3676993-C682-11D2-8A2A-006097AFF44E}"; break; case (esriFeatureType.esriFTDimension): geometryType = esriGeometryType.esriGeometryPolygon; uidCLSID.Value = "{496764FC-E0C9-11D3-80CE-00C04F601565}"; break; } } // Set uidCLSEXT (if Null) if (uidCLSEXT == null) { switch (featureType) { case (esriFeatureType.esriFTAnnotation): uidCLSEXT = new UIDClass(); uidCLSEXT.Value = "{24429589-D711-11D2-9F41-00C04F6BC6A5}"; break; case (esriFeatureType.esriFTDimension): uidCLSEXT = new UIDClass(); uidCLSEXT.Value = "{48F935E2-DA66-11D3-80CE-00C04F601565}"; break; } } // Add Fields if (fields == null) { // Create fields collection fields = new FieldsClass(); IFieldsEdit fieldsEdit = (IFieldsEdit)fields; // Create the geometry field IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; // Assign Geometry Definition geometryDefEdit.GeometryType_2 = geometryType; geometryDefEdit.GridCount_2 = 1; geometryDefEdit.set_GridSize(0, 0.5); geometryDefEdit.AvgNumPoints_2 = 2; geometryDefEdit.HasM_2 = false; geometryDefEdit.HasZ_2 = false; if (objectWorkspace is IWorkspace) { // If this is a STANDALONE FeatureClass then add spatial reference. geometryDefEdit.SpatialReference_2 = spatialReference; } // Create OID Field IField fieldOID = new FieldClass(); IFieldEdit fieldEditOID = (IFieldEdit)fieldOID; fieldEditOID.Name_2 = "OBJECTID"; fieldEditOID.AliasName_2 = "OBJECTID"; fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID; fieldsEdit.AddField(fieldOID); // Create Geometry Field IField fieldShape = new FieldClass(); IFieldEdit fieldEditShape = (IFieldEdit)fieldShape; fieldEditShape.Name_2 = "SHAPE"; fieldEditShape.AliasName_2 = "SHAPE"; fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry; fieldEditShape.GeometryDef_2 = geometryDef; fieldsEdit.AddField(fieldShape); } // Locate Shape Field string stringShapeFieldName = null; int i = 0; while (i <= fields.FieldCount - 1) { if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { stringShapeFieldName = fields.get_Field(i).Name; break; } i = i + 1; } if (stringShapeFieldName == null) { throw (new System.Data.ConstraintException("Cannot locate geometry field in FIELDS")); } IFeatureClass featureClass = null; if (objectWorkspace is IFeatureWorkspace) { // Create a STANDALONE FeatureClass IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)objectWorkspace; featureClass = featureWorkspace.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT, featureType, stringShapeFieldName, configWord); } else if (objectWorkspace is IFeatureDataset) { IFeatureDataset featureDataset = (IFeatureDataset)objectWorkspace; featureClass = featureDataset.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT, featureType, stringShapeFieldName, configWord); } // Set the alias IClassSchemaEdit classSchemaEdit = (IClassSchemaEdit)featureClass; classSchemaEdit.AlterAliasName(GeodatabaseUtil.GetUnQualifiedName(name)); // Return FeatureClass return(featureClass); }