// // CONSTRUCTOR // public ShapeValidator() : base() { string tempPath = Path.GetTempPath(); string connection = string.Format("DATABASE={0}", tempPath); IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromString(connection, 0); this.SetWorkspace(workspace); }
// // CONSTRUCTOR // public ShapeValidator() : base() { string tempPath = Path.GetTempPath(); string connection = string.Format("DATABASE={0}", tempPath); IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromString(connection, 0); this.SetWorkspace(workspace); }
private static IFeatureClass OpenOrCreateShapeFile(string a_ShapeFilePath, bool a_CreateIfNotExists) { var a_WorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace a_Workspace = null; try { var a_Directory = Path.GetDirectoryName(a_ShapeFilePath); if (string.IsNullOrEmpty(a_Directory)) { throw new Exception("Directory name is empty"); } if (!Directory.Exists(a_Directory)) { Directory.CreateDirectory(a_Directory); } var a_TableName = Path.GetFileNameWithoutExtension(a_ShapeFilePath); if (string.IsNullOrEmpty(a_TableName)) { throw new Exception("Table name is empty"); } a_Workspace = (IFeatureWorkspace)a_WorkspaceFactory.OpenFromString(string.Format("Database={0}", a_Directory), 0); IFeatureClass a_FeatureClass = null; if (((IWorkspace2)a_Workspace).NameExists[esriDatasetType.esriDTFeatureClass, a_TableName]) { a_FeatureClass = a_Workspace.OpenFeatureClass(a_TableName); } else if (a_CreateIfNotExists) { IFeatureClassDescription a_FeatureClassDescription = new FeatureClassDescriptionClass(); var a_ObjectClassDescription = (IObjectClassDescription)a_FeatureClassDescription; var a_Fields = a_ObjectClassDescription.RequiredFields; var a_FieldsEdit = (IFieldsEdit)a_Fields; // Find the shape field in the required fields and modify its GeometryDef to // use point geometry and to set the spatial reference. var a_ShapeFieldIndex = a_Fields.FindField(a_FeatureClassDescription.ShapeFieldName); var a_Field = a_Fields.Field[a_ShapeFieldIndex]; var a_GeometryDef = a_Field.GeometryDef; var a_GeometryDefEdit = (IGeometryDefEdit)a_GeometryDef; a_GeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; #region fields a_Field = new FieldClass { IFieldEdit_Name_2 = fnCountryName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); var a_AddIntField = new Action <string>(a_FieldName => { a_Field = new FieldClass { IFieldEdit_Name_2 = a_FieldName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeInteger, IFieldEdit_DefaultValue_2 = 0, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); }); a_AddIntField(fnWide); a_AddIntField(fnLocal); a_AddIntField(fnRegional); a_AddIntField(fnLow); a_AddIntField(fnHigh); a_AddIntField(fnHighAndVeryHigh); a_AddIntField(fnMedium); a_AddIntField(fnBasic); a_AddIntField(fnClass1); a_AddIntField(fnClass2); a_AddIntField(fnClass3); a_AddIntField(fnClass4); a_AddIntField(fnScore); a_AddIntField(fnExtinctInWild); a_AddIntField(fnCriticallyEndangered); a_AddIntField(fnEndangered); a_AddIntField(fnVulnerable); a_AddIntField(fnNearThreatened); a_AddIntField(fnLeastConcern); a_AddIntField(fnDataDeficient); a_AddIntField(fnNotEvaluated); #endregion fields IFieldChecker a_FieldChecker = new FieldCheckerClass(); IEnumFieldError a_EnumFieldError = null; IFields a_ValidatedFields = null; a_FieldChecker.ValidateWorkspace = (IWorkspace)a_Workspace; a_FieldChecker.Validate(a_Fields, out a_EnumFieldError, out a_ValidatedFields); a_FeatureClass = a_Workspace.CreateFeatureClass( a_TableName, a_ValidatedFields, a_ObjectClassDescription.InstanceCLSID, a_ObjectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, ((IFeatureClassDescription)a_ObjectClassDescription).ShapeFieldName, string.Empty); } return(a_FeatureClass); } finally { if (a_Workspace != null) { Marshal.ReleaseComObject(a_Workspace); } Marshal.ReleaseComObject(a_WorkspaceFactory); } }
private static IFeatureClass OpenOrCreateResultsShapeFile(string a_ShapeFilePath, bool a_CreateIfNotExists) { var a_WorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace a_Workspace = null; try { var a_Directory = Path.GetDirectoryName(a_ShapeFilePath); if (string.IsNullOrEmpty(a_Directory)) { throw new Exception("Directory name is empty"); } if (!Directory.Exists(a_Directory)) { Directory.CreateDirectory(a_Directory); } var a_TableName = Path.GetFileNameWithoutExtension(a_ShapeFilePath); if (string.IsNullOrEmpty(a_TableName)) { throw new Exception("Table name is empty"); } a_Workspace = (IFeatureWorkspace)a_WorkspaceFactory.OpenFromString(string.Format("Database={0}", a_Directory), 0); IFeatureClass a_FeatureClass = null; if (((IWorkspace2)a_Workspace).NameExists[esriDatasetType.esriDTFeatureClass, a_TableName]) { a_FeatureClass = a_Workspace.OpenFeatureClass(a_TableName); } else if (a_CreateIfNotExists) { IFeatureClassDescription a_FeatureClassDescription = new FeatureClassDescriptionClass(); var a_ObjectClassDescription = (IObjectClassDescription)a_FeatureClassDescription; var a_Fields = a_ObjectClassDescription.RequiredFields; var a_FieldsEdit = (IFieldsEdit)a_Fields; // Find the shape field in the required fields and modify its GeometryDef to // use point geometry and to set the spatial reference. var a_ShapeFieldIndex = a_Fields.FindField(a_FeatureClassDescription.ShapeFieldName); var a_Field = a_Fields.Field[a_ShapeFieldIndex]; var a_GeometryDef = a_Field.GeometryDef; var a_GeometryDefEdit = (IGeometryDefEdit)a_GeometryDef; a_GeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; a_Field = new FieldClass { IFieldEdit_Name_2 = fnSpeciesName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnCategory, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 30, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnBiomesTableName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnRegionTableName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnFocalRegionTableName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnFocalRegionFieldName, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnFocalRegionFieldValues, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnFocalRegionNames, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnCalculationType, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 40, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnTitle, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 255, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnSpeciesArea, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_DefaultValue_2 = null, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnRegionsArea, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_DefaultValue_2 = null, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnFocalRegionsArea, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_DefaultValue_2 = null, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnIntersectionArea, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_DefaultValue_2 = null, IFieldEdit_Editable_2 = true, }; a_FieldsEdit.AddField(a_Field); //caculated data //can be null a_Field = new FieldClass { IFieldEdit_Name_2 = fnGlobalDistribution, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 50, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnDPobs, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnDPexp, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeDouble, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnRegionalDistribution, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 50, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnPriority, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 50, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnClass, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeString, IFieldEdit_Length_2 = 40, IFieldEdit_DefaultValue_2 = string.Empty, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); a_Field = new FieldClass { IFieldEdit_Name_2 = fnScore, IFieldEdit_Type_2 = esriFieldType.esriFieldTypeSmallInteger, IFieldEdit_Editable_2 = true, IFieldEdit2_IsNullable_2 = true, }; a_FieldsEdit.AddField(a_Field); IFieldChecker a_FieldChecker = new FieldCheckerClass(); IEnumFieldError a_EnumFieldError = null; IFields a_ValidatedFields = null; a_FieldChecker.ValidateWorkspace = (IWorkspace)a_Workspace; a_FieldChecker.Validate(a_Fields, out a_EnumFieldError, out a_ValidatedFields); a_FeatureClass = a_Workspace.CreateFeatureClass( a_TableName, a_ValidatedFields, a_ObjectClassDescription.InstanceCLSID, a_ObjectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, ((IFeatureClassDescription)a_ObjectClassDescription).ShapeFieldName, string.Empty); } return(a_FeatureClass); } finally { if (a_Workspace != null) { Marshal.ReleaseComObject(a_Workspace); } Marshal.ReleaseComObject(a_WorkspaceFactory); } }