Exemple #1
0
        public System.Data.DataColumn GetAttributeType(IField2 field)
        {
            if (field == null)
            {
                throw new ArgumentNullException("field");
            }

            if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeBlob)
            {
                return(new System.Data.DataColumn(field.Name, typeof(byte[])));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDate)
            {
                return(new System.Data.DataColumn(field.Name, typeof(DateTime)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDouble)
            {
                return(new System.Data.DataColumn(field.Name, typeof(double)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGlobalID)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Guid)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGUID)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Guid)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Int32)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Int32)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeRaster)
            {
                return(new System.Data.DataColumn(field.Name, typeof(System.Drawing.Image)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeSingle)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Single)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeSmallInteger)
            {
                return(new System.Data.DataColumn(field.Name, typeof(Single)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString)
            {
                return(new System.Data.DataColumn(field.Name, typeof(string)));
            }
            else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeXML)
            {
                return(new System.Data.DataColumn(field.Name, typeof(byte[])));
            }

            return(null);
        }
        public bool CadastralTableAddField(ICadastralFabric pCadaFab, esriCadastralFabricTable eTable, esriFieldType FieldType,
                                           string FieldName, string FieldAlias, int FieldLength)
        {
            ITable pTable = pCadaFab.get_CadastralTable(eTable);

            // First check to see if a field with this name already exists
            if (pTable.FindField(FieldName) > -1)
            {
                if (pTable != null)
                {
                    Marshal.ReleaseComObject(pTable);
                }
                return(false);
            }

            IField2 pField = null;

            try
            {
                //Create a new Field
                pField = new FieldClass();
                //QI for IFieldEdit
                IFieldEdit2 pFieldEdit = (IFieldEdit2)pField;
                pFieldEdit.Type_2       = FieldType;
                pFieldEdit.Editable_2   = true;
                pFieldEdit.IsNullable_2 = true;
                pFieldEdit.Name_2       = FieldName;
                pFieldEdit.AliasName_2  = FieldAlias;
                pFieldEdit.Length_2     = FieldLength;
                //'.RasterDef_2 = pRasterDef
                pTable.AddField(pField);

                if (pField != null)
                {
                    Marshal.ReleaseComObject(pField);
                }
            }
            catch (COMException ex)
            {
                if (pField != null)
                {
                    Marshal.ReleaseComObject(pField);
                }
                MessageBox.Show(ex.Message);
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// 在Geodatabase中创建栅格数据编目
        /// </summary>
        /// <param name="pRasterWSEx">目标Geodatabase工作区</param>
        /// <param name="pCatalogName">栅格编目的名称</param>
        /// <param name="pRasterFielsName">栅格列的名称</param>
        /// <param name="pShapeFieldName">几何要素列名称(Shape)</param>
        /// <param name="pRasterSpatialRef">几何要素列空间参考</param>
        /// <param name="pGeoSpatialRef">栅格列空间参考</param>
        /// <param name="pKeyword"> 栅格编目表的字段</param>
        /// <param name="eError">ArcSDE 适用, 表示configuration keyword</param>
        /// <returns></returns>
        private IRasterCatalog CreateCatalog(IRasterWorkspaceEx pRasterWSEx, string pCatalogName, string pRasterFielsName, string pShapeFieldName, ISpatialReference pRasterSpatialRef, ISpatialReference pGeoSpatialRef, string pKeyword, bool ismanaged, out Exception eError)
        {
            eError = null;
            IRasterCatalog pRasterCat = null;

            try
            {
                #region 创建字段
                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFeildsEdit = pFields as IFieldsEdit;
                IField      pField      = null;

                pField = CreateCommonField("Name", esriFieldType.esriFieldTypeString);
                if (pField == null)
                {
                    eError = new Exception("创建'name'字段出错!");
                    return(null);
                }
                pFeildsEdit.AddField(pField);

                IField2 pField2 = CreateRasterField(pRasterFielsName, pRasterSpatialRef, ismanaged);
                if (pField == null)
                {
                    eError = new Exception("创建栅格字段出错!");
                    return(null);
                }
                pFeildsEdit.AddField(pField2);
                pField = CreateShapeField(pShapeFieldName, pGeoSpatialRef);
                if (pField == null)
                {
                    eError = new Exception("创建几何字段出错!");
                    return(null);
                }
                pFeildsEdit.AddField(pField);
                pField = CreateOIDField("OBJECTID");
                if (pField == null)
                {
                    eError = new Exception("创建OID字段出错!");
                    return(null);
                }
                pFeildsEdit.AddField(pField);
                pField = null;
                if (pKeyword.Trim() == "")
                {
                    pKeyword = "defaults";
                }
                pFields = pFeildsEdit as IFields;

                //创建用户自定义字段
                #endregion

                pRasterCat = pRasterWSEx.CreateRasterCatalog(pCatalogName, pFields, pShapeFieldName, pRasterFielsName, pKeyword);

                return(pRasterCat);
            }
            catch (System.Exception ex)
            {
                //*******************************************************************
                //guozheng added
                if (ModData.SysLog != null)
                {
                    ModData.SysLog.Write(ex, null, DateTime.Now);
                }
                else
                {
                    ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    ModData.SysLog.Write(ex, null, DateTime.Now);
                }
                //********************************************************************

                eError = new Exception("创建栅格编目出错!\n" + ex.Message);
                return(null);
            }
        }
        public bool CadastralTableAddFieldV1(ICadastralFabric pCadaFab, esriCadastralFabricTable eTable, esriFieldType FieldType,
                                             string FieldName, string FieldAlias, int FieldLength)
        {
            ITable pTable = pCadaFab.get_CadastralTable(eTable);

            // First check to see if a field with this name already exists
            if (pTable.FindField(FieldName) > -1)
            {
                if (pTable != null)
                {
                    Marshal.ReleaseComObject(pTable);
                }
                return(false);
            }

            IDatasetComponent  pDSComponent = (IDatasetComponent)pCadaFab;
            IDEDataset         pDEDS        = pDSComponent.DataElement;
            IDECadastralFabric pDECadaFab   = (IDECadastralFabric)pDEDS;

            IField2 pField = null;

            try
            {
                //Create a new Field
                pField = new FieldClass();
                //QI for IFieldEdit
                IFieldEdit2 pFieldEdit = (IFieldEdit2)pField;
                pFieldEdit.Type_2       = FieldType;
                pFieldEdit.Editable_2   = true;
                pFieldEdit.IsNullable_2 = true;
                pFieldEdit.Name_2       = FieldName;
                pFieldEdit.AliasName_2  = FieldAlias;
                pFieldEdit.Length_2     = FieldLength;
                //'.RasterDef_2 = pRasterDef
            }
            catch (COMException ex)
            {
                if (pField != null)
                {
                    Marshal.ReleaseComObject(pField);
                }
                MessageBox.Show(ex.Message);
                return(false);
            }

            IArray pArr = pDECadaFab.CadastralTableFieldEdits;

            bool found = false;
            int  cnt   = pArr.Count;
            ICadastralTableFieldEdits pCadaTableFldEdits = null;
            IFields pFields = null;

            for (int i = 0; i <= (cnt - 1); i++)
            {
                pCadaTableFldEdits = (ICadastralTableFieldEdits)pArr.get_Element(i);
                IFieldsEdit pNewFields = new FieldsClass();
                int         fldCnt     = 0;
                if (pCadaTableFldEdits.CadastralTable == eTable)
                {
                    pFields = pCadaTableFldEdits.ExtendedAttributeFields;
                    //Copy existing fields
                    if (pFields != null)
                    {
                        fldCnt = pFields.FieldCount;
                        pNewFields.FieldCount_2 = fldCnt + 1;
                        for (int j = 0; j <= (fldCnt - 1); j++)
                        {
                            pNewFields.Field_2[j] = pFields.get_Field(j);
                        }
                    }
                    else
                    {
                        pNewFields.FieldCount_2 = 1;
                    }

                    //Add the new field
                    pNewFields.Field_2[fldCnt] = pField;
                    //reset extended attribute fields
                    pCadaTableFldEdits.ExtendedAttributeFields = pNewFields;
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                pCadaTableFldEdits = new CadastralTableFieldEditsClass();
                pCadaTableFldEdits.CadastralTable = eTable; //add the field to the table
                pFields = new FieldsClass();
                int         fldCnt      = pFields.FieldCount;
                IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;
                pFieldsEdit.FieldCount_2    = fldCnt + 1;
                pFieldsEdit.Field_2[fldCnt] = pField;
                pCadaTableFldEdits.ExtendedAttributeFields = pFields;
                pArr.Add(pCadaTableFldEdits);
                Marshal.ReleaseComObject(pFields);
            }

            //Set the CadastralTableFieldEdits property on the DE to the array
            pDECadaFab.CadastralTableFieldEdits = pArr;

            // Update the schema
            ICadastralFabricSchemaEdit pSchemaEd = (ICadastralFabricSchemaEdit)pCadaFab;

            pSchemaEd.UpdateSchema(pDECadaFab);

            Marshal.ReleaseComObject(pField);
            return(true);
        }
Exemple #5
0
        public IField2 GetAttributeType(DataColumn geometryColumn)
        {
            if (geometryColumn == null)
            {
                throw new ArgumentNullException("geometryColumn");
            }

            IField2 field = null;

            if (geometryColumn.DataType == typeof(byte[]))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeBlob;
            }
            else if (geometryColumn.DataType == typeof(DateTime))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeDate;
            }
            else if (geometryColumn.DataType == typeof(double))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            }
            else if (geometryColumn.DataType == typeof(Guid) && geometryColumn.Unique)
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeGlobalID;
            }
            else if (geometryColumn.DataType == typeof(Guid) && !geometryColumn.Unique)
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeGUID;
            }
            else if (geometryColumn.DataType == typeof(Int32) && geometryColumn.Unique)//OID
            {
                field = new FieldClass();
                IFieldEdit fieldEditOID = (IFieldEdit)field;
                fieldEditOID.Name_2      = geometryColumn.ColumnName;
                fieldEditOID.AliasName_2 = geometryColumn.ColumnName;
                fieldEditOID.Type_2      = esriFieldType.esriFieldTypeOID;
            }
            else if (geometryColumn.DataType == typeof(Int32) && !geometryColumn.Unique)
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeInteger;
            }
            else if (geometryColumn.DataType == typeof(Single))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeSingle;
            }
            else if (geometryColumn.DataType == typeof(string))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = (IFieldEdit)field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
                fieldEdit.Length_2    = geometryColumn.MaxLength;
            }
            else if (geometryColumn.DataType == typeof(System.Drawing.Image))
            {
                field = new FieldClass();
                IFieldEdit fieldEdit = ( IFieldEdit )field;
                fieldEdit.Name_2      = geometryColumn.ColumnName;
                fieldEdit.AliasName_2 = geometryColumn.ColumnName;
                fieldEdit.Type_2      = esriFieldType.esriFieldTypeRaster;
            }

            return(field);
        }