arcengine要素类的复制
using System;
using System.Collections.Generic; using System.Text;
using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Carto; namespace MyGISClass {
/// /// 该类主要包含了要素类的复制以及同要素类数据的加载 /// 函数主要用于SDE与Personal GDB之间数据的处理 ///
class FeatureClassDataManager {
/// /// 根据传入的源要素类OldFeatureClass,新空间范围,要素存储工作空间,新要素类名 /// 产生具有相同字段结构和不同空间范围的要素类 ///
/// 源要素类
/// 存储工作空间 /// 新要素类名
/// 新空间范围,可为null ///
public IFeatureClassCloneFeatureClassInWorkspace(IFeatureClassOldFeatureClass, IFeatureWorkspaceSaveFeatWorkspace, string FeatClsName, IEnvelopepDomainEnv) {
IFieldspFields = CloneFeatureClassFields(OldFeatureClass, pDomainEnv);
return SaveFeatWorkspace.CreateFeatureClass(FeatClsName, pFields, null, null, esriFeatureType.esriFTSimple, OldFeatureClass.ShapeFieldName, \"\"); }
/// /// 复制AnnotationClass,未完待续 ///
/// /// /// /// ///
IFeatureClassCloneAnnotationClassInWorkspace(IFeatureClassOldFeatureClass,
IFeatureWorkspaceSaveFeatWorkspace, string FeatClsName, IEnvelopepDomainEnv) {
IFeatureWorkspaceAnnopFWSAnno = (IFeatureWorkspaceAnno)SaveFeatWorkspace; IAnnoClasspAnnoClass = (IAnnoClass)OldFeatureClass.Extension; return null; }
/// /// 将inFeatureClass要素类中所有符合pQueryFilter的要素复制到saveFeatureClass中,仅复制不做任何修改 ///
/// 源要素类
/// 存储要素类 /// 过滤参数 ///
//生成两个要素类字段的对应表
Dictionary IFeatureCursorpsaveFeatCursor = saveFeatureClass.Insert(true); //使用IFeatureBuffer在内存中产生缓存避免多次打开,关闭数据库 IFeatureBufferpsaveFeatBuf = null; IFeaturepsaveFeat = null; long n = 0; while (pinFeat != null) { try { psaveFeatBuf = saveFeatureClass.CreateFeatureBuffer(); psaveFeat = psaveFeatBuf as IFeature; if (inFeatureClass.FeatureType esriFeatureType.esriFTAnnotation) { IAnnotationFeaturepAF = (IAnnotationFeature)pinFeat; IAnnotationFeaturepNAF = (IAnnotationFeature)psaveFeat; if (pAF.Annotation != null) { pNAF.Annotation = pAF.Annotation; } } == psaveFeat.Shape = pinFeat.Shape; foreach (KeyValuePair if (pinFeat.get_Value(keyvalue.Key).ToString() == \"\") { if (psaveFeat.Fields.get_Field(keyvalue.Value).Type == esriFieldType.esriFieldTypeString) { psaveFeat.set_Value(keyvalue.Value, \"\"); } else { psaveFeat.set_Value(keyvalue.Value, 0); } } else { psaveFeat.set_Value(keyvalue.Value, pinFeat.get_Value(keyvalue.Key)); } } psaveFeatCursor.InsertFeature(psaveFeatBuf); } catch (Exception ex) { } finally { psaveFeat = null; n++; if (n % 2000 == 0) { psaveFeatCursor.Flush(); } pinFeat = pinFeatCursor.NextFeature(); } } psaveFeatCursor.Flush(); return true; } private IFieldsCloneFeatureClassFields(IFeatureClasspFeatureClass, IEnvelopepDomainEnv) { IFieldspFields = new FieldsClass(); IFieldsEditpFieldsEdit = (IFieldsEdit)pFields; //根据传入的要素类,将除了shape字段之外的字段复制 long nOldFieldsCount = pFeatureClass.Fields.FieldCount; long nOldGeoIndex = pFeatureClass.Fields.FindField(pFeatureClass.ShapeFieldName); for (inti = 0; i pFieldsEdit.AddField(pFeatureClass.Fields.get_Field(i)); } else { IGeometryDefpGeomDef = new GeometryDefClass(); IGeometryDefEditpGeomDefEdit = (IGeometryDefEdit)pGeomDef; ISpatialReferencepSR = null; if (pDomainEnv != null) { pSR = new UnknownCoordinateSystemClass(); pSR.SetDomain(pDomainEnv.XMin, pDomainEnv.XMax, pDomainEnv.YMin, pDomainEnv.YMax); } else { IGeoDatasetpGeoDataset = pFeatureClass as IGeoDataset; pSR = CloneSpatialReference(pGeoDataset.SpatialReference); } //设置新要素类Geometry的参数 pGeomDefEdit.GeometryType_2 = pFeatureClass.ShapeType; pGeomDefEdit.GridCount_2 = 1; pGeomDefEdit.set_GridSize(0, 10); pGeomDefEdit.AvgNumPoints_2 = 2; pGeomDefEdit.SpatialReference_2 = pSR; //产生新的shape字段 IFieldpField = new FieldClass(); IFieldEditpFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = \"shape\"; pFieldEdit.AliasName_2 = \"shape\"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGeomDef; pFieldsEdit.AddField(pField); } } return pFields; } private ISpatialReferenceCloneSpatialReference(ISpatialReferencepSrcSpatialReference) { double xmin, xmax, ymin, ymax; pSrcSpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax); ISpatialReferencepSR = new UnknownCoordinateSystemClass(); pSR.SetDomain(xmin, xmax, ymin, ymax); return pSR; } private void GetFCFieldsDirectory(IFeatureClasspFCold,IFeatureClasspFCnew,ref Dictionary for(inti=0;i case \"OBJECTID\": case \"SHAPE\": case \"SHAPE_LENGTH\": case \"SHAPE_AREA\": case \"FID\": { //以上字段由系统自动生成 break; } default: { for(int j=0;j tmpstrnew=pFCnew.Fields.get_Field(j).Name.ToUpper(); if(tmpstrold==tmpstrnew) { FieldsDictionary.Add(i,j); break; } } break; } } } } } } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务