public bool CreateFeatureClassUnderDS(string FCName, string DSName, bool IncludeFeature, bool CreateDS, string TempDBID, bool AddFID) { IFeatureWorkspace pDesFeatureWorkspace = this._Workspace as IFeatureWorkspace; IFeatureClass pDesFeatureClass = null; if (pDesFeatureWorkspace == null) { return(false); } IFeatureWorkspace pSourFeatureWorkspace = this._TempleteWorkspace as IFeatureWorkspace; if (pSourFeatureWorkspace == null) { return(false); } IFeatureDataset pDesFeatureDataset = null; IFeatureDataset pSrcFeatureDataset = null; if (CreateDS) { //创建数据集 pSrcFeatureDataset = pSourFeatureWorkspace.OpenFeatureDataset(DSName); IGeoDataset pGeoDataset = pSrcFeatureDataset as IGeoDataset; pDesFeatureDataset = pDesFeatureWorkspace.CreateFeatureDataset(DSName + TempDBID, pGeoDataset.SpatialReference); } else { pDesFeatureDataset = pDesFeatureWorkspace.OpenFeatureDataset(DSName + TempDBID); } #region 创建目标图层 //获取源要素类 IFeatureClass pSourFeatureClass = pSourFeatureWorkspace.OpenFeatureClass(FCName); if (pSourFeatureClass == null) { return(false); } //获取源要素类后判断要素类的类型 if (pSourFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation) //如果是注记层 { IFeatureWorkspaceAnno pFWSAnno = pDesFeatureWorkspace as IFeatureWorkspaceAnno; IAnnoClass pAnnoClass = pSourFeatureClass.Extension as IAnnoClass; IGraphicsLayerScale pGLS = new GraphicsLayerScaleClass(); pGLS.ReferenceScale = pAnnoClass.ReferenceScale; pGLS.Units = pAnnoClass.ReferenceScaleUnits; ///添加特殊字段 /// IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Editable_2 = true; pFieldEdit.Name_2 = "GOFID"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; IField pField2 = new FieldClass(); IFieldEdit pFieldEdit2 = pField2 as IFieldEdit; pFieldEdit2.Editable_2 = true; pFieldEdit2.Name_2 = "pro_id"; //项目ID pFieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger; IFields pFields = pSourFeatureClass.Fields; if (AddFID) { IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; pFieldsEdit.AddField(pField); pFieldsEdit.AddField(pField2); pDesFeatureClass = pFWSAnno.CreateAnnotationClass(FCName + TempDBID, pFields, pSourFeatureClass.CLSID, pSourFeatureClass.EXTCLSID, pSourFeatureClass.ShapeFieldName, "", pDesFeatureDataset, null, pAnnoClass.AnnoProperties, pGLS, pAnnoClass.SymbolCollection, true); pFieldsEdit.DeleteField(pField); pFieldsEdit.DeleteField(pField2); } else { pDesFeatureClass = pFWSAnno.CreateAnnotationClass(FCName + TempDBID, pFields, pSourFeatureClass.CLSID, pSourFeatureClass.EXTCLSID, pSourFeatureClass.ShapeFieldName, "", pDesFeatureDataset, null, pAnnoClass.AnnoProperties, pGLS, pAnnoClass.SymbolCollection, true); } } else //如果是普通要素类 { ///添加特殊字段 /// IField pField = new FieldClass(); IFieldEdit pFieldEdit = pField as IFieldEdit; pFieldEdit.Editable_2 = true; pFieldEdit.Name_2 = "GOFID"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; IField pField2 = new FieldClass(); IFieldEdit pFieldEdit2 = pField2 as IFieldEdit; pFieldEdit2.Editable_2 = true; pFieldEdit2.Name_2 = "pro_id"; //项目ID pFieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger; IFields pFields = pSourFeatureClass.Fields; if (AddFID) { IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; pFieldsEdit.AddField(pField); pFieldsEdit.AddField(pField2); pDesFeatureClass = pDesFeatureDataset.CreateFeatureClass(FCName + TempDBID, pFields, pSourFeatureClass.CLSID, pSourFeatureClass.EXTCLSID, pSourFeatureClass.FeatureType, pSourFeatureClass.ShapeFieldName, ""); pFieldsEdit.DeleteField(pField); pFieldsEdit.DeleteField(pField2); } else { pDesFeatureClass = pDesFeatureDataset.CreateFeatureClass(FCName + TempDBID, pFields, pSourFeatureClass.CLSID, pSourFeatureClass.EXTCLSID, pSourFeatureClass.FeatureType, pSourFeatureClass.ShapeFieldName, ""); } } #endregion if (pDesFeatureClass == null) { return(false); } //导入要素 if (IncludeFeature) //如果需要复制要素 { Exception eError = null; Dictionary <string, string> pDic = new Dictionary <string, string>(); IFeatureCursor pFeatureCursor = pSourFeatureClass.Search(null, false); IFields pFields = pSourFeatureClass.Fields; for (int i = 0; i < pFields.FieldCount; i++) { IField pField = pFields.get_Field(i); if (pField.Editable) { pDic.Add(pField.Name, pField.Name); } } SysCommon.Gis.SysGisDataSet pSysGisDataSet = new SysCommon.Gis.SysGisDataSet(); pSysGisDataSet.WorkSpace = this._Workspace; pSysGisDataSet.NewFeatures(FCName, pFeatureCursor, pDic, null, true, true, out eError); //释放cursor System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor); } return(true); }