Ejemplo n.º 1
0
        private void RenameClassObject(IDataset dsCurrent, int standardID)
        {
            if (dsCurrent == null)
            {
                return;
            }

            Hy.Check.Define.StandardLayer standardLayer = LayerReader.GetLayerByName(dsCurrent.Name, standardID);
            //string strAliasName = Hy.Check.Rule.Helper.LayerReader.GetAliasName(dsCurrent.Name, standardID);
            if (standardLayer != null)// dsCurrent.Name != strAliasName)
            {
                ISchemaLock schemaLock = dsCurrent as ISchemaLock;
                schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);

                IClassSchemaEdit classSchemaEdit = dsCurrent as IClassSchemaEdit;
                if (classSchemaEdit != null)
                {
                    classSchemaEdit.AlterAliasName(standardLayer.AliasName);

                    ITable tCurrent = dsCurrent as ITable;
                    if (tCurrent != null)
                    {
                        List <Hy.Check.Define.StandardField> fields = FieldReader.GetFieldsByLayer(standardLayer.ID);
                        for (int i = 0; i < fields.Count; i++)
                        {
                            if (tCurrent.Fields.FindField(fields[i].Name) > -1)
                            {
                                classSchemaEdit.AlterFieldAliasName(fields[i].Name, fields[i].AliasName);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 创建矢量数据
        /// </summary>
        /// <param name="pWorkspace"></param>
        /// <returns></returns>
        public IFeatureClass CreateFeatureClassClass(IWorkspace pWorkspace, string strName, string strAliasName, IFields fields)
        {
            if (pWorkspace == null)
            {
                return(null);
            }
            IFeatureWorkspace featureWorkspace = pWorkspace as IFeatureWorkspace;

            if (featureWorkspace == null)
            {
                return(null);
            }

            IFeatureClass featureClass = null;

            try
            {
                featureClass = featureWorkspace.CreateFeatureClass(strName, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
                if (!string.IsNullOrEmpty(strAliasName))
                {
                    IClassSchemaEdit classSchemaEdit = featureClass as IClassSchemaEdit;
                    if (null != classSchemaEdit)
                    {
                        classSchemaEdit.AlterAliasName(strAliasName);
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(featureClass);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 创建属性表
        /// </summary>
        /// <param name="pWorkspace"></param>
        /// <returns></returns>
        public ITable CreateTable(IWorkspace pWorkspace, string strName, string strAliasName, IFields fields)
        {
            if (pWorkspace == null)
            {
                return(null);
            }
            IFeatureWorkspace featureWorkspace = pWorkspace as IFeatureWorkspace;

            if (featureWorkspace == null)
            {
                return(null);
            }
            ITable table = null;

            try
            {
                table = featureWorkspace.CreateTable(strName, fields, null, null, null);
                if (!string.IsNullOrEmpty(strAliasName))
                {
                    IClassSchemaEdit classSchemaEdit = table as IClassSchemaEdit;
                    if (null != classSchemaEdit)
                    {
                        classSchemaEdit.RegisterAsObjectClass("OBJECTID", null);
                        classSchemaEdit.AlterAliasName(strAliasName);
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(table);
        }
Ejemplo n.º 4
0
        //更改表别名 函数
        public static bool AlterAliasName(ITable table, string NewAliasName)
        {
            bool             rbc    = false;
            ISchemaLock      sLock  = table as ISchemaLock;
            IClassSchemaEdit csEdit = table as IClassSchemaEdit;

            if (sLock != null && csEdit != null)
            {
                sLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                //改变要素类别名
                csEdit.AlterAliasName(NewAliasName);
                //释放锁定
                sLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
                rbc = true;
            }
            return(rbc);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 构建一个在要素集中的要素类
        /// </summary>
        /// <param name="targetWorkSpace">目标工作空间</param>
        /// <param name="DatasetName">要素集名</param>
        /// <param name="FcName">要素类名</param>
        /// <param name="FcAlias">要素类别名</param>
        /// <returns></returns>
        public bool CreateDatasetFeatureClass(IFeatureWorkspace targetWorkSpace, string DatasetName, string FcName, string FcAlias = "")
        {
            bool result = true;

            try
            {
                FieldsHelper = new FieldsHelper();
                OnAddField(FieldsHelper, FcName, FcAlias);

                IFeatureDataset targetDataset = null;
                if ((targetWorkSpace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureDataset, DatasetName) == false)
                {
                    targetDataset = targetWorkSpace.CreateFeatureDataset(DatasetName, FieldsHelper.GetSpatialRef());
                }
                else
                {
                    targetDataset = targetWorkSpace.OpenFeatureDataset(DatasetName);
                }


                if ((targetDataset as IFeatureClassContainer).get_ClassByName(FcName) != null)
                {
                    ErrorMessage = "当前要素类已经存在";
                    return(false);
                }

                UID CLSID = new UID();
                CLSID.Value = "esriGeoDatabase.Feature";

                ResultFeatureClass = targetDataset.CreateFeatureClass(FcName, FieldsHelper.Fields, CLSID, null, esriFeatureType.esriFTSimple, FieldsHelper.GetShapeFieldName(), null);

                if (string.IsNullOrEmpty(FcAlias) == false)
                {
                    IClassSchemaEdit pClassSchemaEdit = ResultFeatureClass as IClassSchemaEdit;
                    pClassSchemaEdit.AlterAliasName(FcAlias);
                }
            }
            catch (Exception ex)
            {
                result       = false;
                ErrorMessage = ex.Message;
            }
            return(result);
        }
Ejemplo n.º 6
0
        public static ITable CreateTable(IFeatureWorkspace featureWorkspace, string name, IFields fields)
        {
            if (featureWorkspace == null)
            {
                throw new ArgumentNullException("Error creating table. The reference to IFeatureWorkspace cannot be NULL.");
            }
            UID pCLSID;

            pCLSID       = new UIDClass();
            pCLSID.Value = "esriGeoDatabase.Object";
            IFieldsEdit pFieldsEdit;

            if ((fields == null) || (fields.FieldCount == 0))
            {
                fields      = new Fields();
                pFieldsEdit = fields as IFieldsEdit;

                IField     pFieldOID     = new Field();
                IFieldEdit pFieldOIDEdit = pFieldOID as IFieldEdit;
                pFieldOIDEdit.Name_2       = "OBJECTID";
                pFieldOIDEdit.Type_2       = esriFieldType.esriFieldTypeOID;
                pFieldOIDEdit.IsNullable_2 = false;

                pFieldsEdit.AddField(pFieldOID);
            }
            ITable table = null;

            try
            {
                table = featureWorkspace.CreateTable(name, fields, pCLSID, null, "");
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                throw new System.Runtime.InteropServices.COMException("An unexpected error occurred while trying to create a table in the geodatabase", ex);
            }

            // Set the alias
            IClassSchemaEdit classSchemaEdit = (IClassSchemaEdit)table;

            classSchemaEdit.AlterAliasName(GetUnQualifiedName(name));

            // Return the table
            return(table);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 创建一个独立要素类
        /// </summary>
        /// <param name="targetWorkSpace">目标工作空间</param>
        /// <param name="FcName">要素类名</param>
        /// <param name="FcAlias">要素类别名</param>
        /// <returns>若创建成功则返回true</returns>
        public bool CreateFeatureClass(IFeatureWorkspace targetWorkSpace, string FcName, string FcAlias = "")
        {
            if ((targetWorkSpace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, FcName))
            {
                ErrorMessage = "当前要素类已经存在";
                return(false);
            }

            bool result = true;

            try
            {
                UID CLSID = new UID();
                CLSID.Value = "esriGeoDatabase.Feature";

                FieldsHelper = new FieldsHelper();
                if (OnAddField(FieldsHelper, FcName, FcAlias) == false)
                {
                    ErrorMessage = "添加字段失败 : " + ErrorMessage;
                    return(false);
                }

                ResultFeatureClass = targetWorkSpace.CreateFeatureClass(FcName, FieldsHelper.Fields, CLSID, null, esriFeatureType.esriFTSimple, FieldsHelper.GetShapeFieldName(), null);

                if (string.IsNullOrEmpty(FcAlias) == false)
                {
                    IClassSchemaEdit pClassSchemaEdit = ResultFeatureClass as IClassSchemaEdit;
                    pClassSchemaEdit.AlterAliasName(FcAlias);
                }
            }
            catch (Exception ex)
            {
                result       = false;
                ErrorMessage = ex.Message;
            }
            return(result);
        }
Ejemplo n.º 8
0
        private void createMatadataMap(IWorkspace inF)
        {
            g_conn = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Plugin.Mod.Server + ") (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User Id=" + Plugin.Mod.User + "; Password="******"";
            //g_conn = "Provider=OraOLEDB.Oracle;Data Source=orc;Persist Security Info=True;User Id=" + Plugin.Mod.User + "; Password="******"";
            OleDbConnection oeCon = new OleDbConnection(g_conn);

            oeCon.Open();
            string pTname = "metadata_map_tmp";

            ModTableFun.DropTable(oeCon, pTname);
            if (!ModTableFun.isExist(oeCon, "metadata_xml") || !ModTableFun.isExist(oeCon, "JHTB"))
            {
                return;
            }
            string sql = "create table metadata_map_tmp as select * from metadata_xml";

            ModTableFun.ExecuteDDL(oeCon, sql);                         //根据元数据表创建中间表
            ModTableFun.DropColumn(oeCon, pTname, "XMLID,METADATAXML"); //删掉不支持的类型的列
            if (!ModTableFun.isExist(oeCon, pTname))                    //中间表未创建  返回
            {
                return;
            }

            IFeatureWorkspace pFW      = inF as IFeatureWorkspace;
            IFeatureClass     pFC_jhtb = pFW.OpenFeatureClass("JHTB");
            IFeatureClass     pFC      = null;                                                            //元数据地图图层

            if (!(inF as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, "METADATA_MAP")) //若不存在就创建
            {
                IGeoDataset pGD_jhtb = pFC_jhtb as IGeoDataset;
                pFC = CreateFeatureClass("METADATA_MAP", pFW, pGD_jhtb.SpatialReference);
                IClassSchemaEdit pCSE = pFC as IClassSchemaEdit;
                pCSE.AlterAliasName("元数据地图");
                ITable pT = pFW.OpenTable(pTname);
                for (int i = 0; i < pT.Fields.FieldCount; i++)
                {
                    IField pField = pT.Fields.get_Field(i);
                    pFC.AddField(pField);
                }
            }
            else//否则直接打开
            {
                //打开前删除全部的记录
                sql = "truncate table METADATA_MAP";
                ModTableFun.ExecuteDDL(oeCon, sql);
                pFC = pFW.OpenFeatureClass("METADATA_MAP");
            }
            if (pFC.FeatureCount(null) != 0)//确认元数据地图层记录为空
            {
                return;
            }
            IFields pFds = pFC.Fields;

            IFeatureCursor insertCsr = pFC.Insert(true);//插入要素的游标


            sql = "select * from " + pTname;
            OleDbDataReader oeDR = ModTableFun.GetReader(oeCon, sql);

            if (oeDR == null)//元数据为空,返回
            {
                return;
            }
            DataTable pDT = oeDR.GetSchemaTable();

            while (oeDR.Read())//遍历记录
            {
                IFeatureBuffer pFB = pFC.CreateFeatureBuffer();
                IFeature       pF  = pFB as IFeature;
                string         tfh = oeDR["图幅号"].ToString();
                IQueryFilter   pQF = new QueryFilterClass();
                pQF.WhereClause = "MAPNO = '" + tfh + "'";
                IFeatureCursor fCursor_jhtb = pFC_jhtb.Search(pQF, false);
                IFeature       f_jhtb       = fCursor_jhtb.NextFeature();
                if (f_jhtb == null)//若元数据表中的图幅号未在结合图表找到,则不加入元数据地图图层
                {
                    continue;
                }
                pF.Shape = f_jhtb.ShapeCopy;     //写结合图表的图形
                foreach (DataRow dr in pDT.Rows) //遍历写入列值
                {
                    int    fdix = pFds.FindField(dr["ColumnName"].ToString());
                    IField pFld = pFds.get_Field(fdix);
                    if ((fdix > -1) && (pFld.Editable == true) && pFld.Type != esriFieldType.esriFieldTypeGeometry && pFld.Type != esriFieldType.esriFieldTypeOID)
                    {
                        pF.set_Value(fdix, oeDR[dr["ColumnName"].ToString()]);
                    }
                }//foreach

                insertCsr.InsertFeature(pFB);//将缓存要素插入游标
            }//while
            insertCsr.Flush();
        }
Ejemplo n.º 9
0
        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);
        }