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); } } } } } }
/// <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); }
/// <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); }
//更改表别名 函数 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); }
/// <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); }
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); }
/// <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); }
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(); }
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); }