//
 // 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);
        }
Beispiel #3
0
        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);
            }
        }