arcengine要素类的复制

上传人:zhu****ng 文档编号:143030238 上传时间:2022-08-25 格式:DOCX 页数:5 大小:12.69KB
返回 下载 相关 举报
arcengine要素类的复制_第1页
第1页 / 共5页
arcengine要素类的复制_第2页
第2页 / 共5页
arcengine要素类的复制_第3页
第3页 / 共5页
点击查看更多>>
资源描述
arcengine 要素类的复制 using System; using ; using System.Text; using ; using ; using ; namespace MyGISClass / / 该类主要包含了要素类的复制以及同要素类数据的加载 / 函数主要用于SDE与Personal GDB之间数据的处理 / class FeatureClassDataManager / / 根据传入的源要素类OldFeatureClass,新空间范围,要素存储工作空间,新要素类名 / 产生具有相同字段结构和不同空间范围的要素类 / / 源要素类 / 存储工作空间 / 新要素类名 / 新空间范围,可为null / public IFeatureClass CloneFeatureClassInWorkspace(IFeatureClass OldFeatureClass, IFeatureWorkspace SaveFeatWorkspace, string FeatClsName, IEnvelope pDomainEnv) IFields pFields = CloneFeatureClassFields(OldFeatureClass, pDomainEnv); return SaveFeatWorkspace.CreateFeatureClass(FeatClsName, pFields, null, null, esriFeatureType.esriFTSimple, OldFeatureClass.ShapeFieldName, ); / / 复制AnnotationClass,未完待续 / / / / / / public IFeatureClass CloneAnnotationClassInWorkspace(IFeatureClass OldFeatureClass, IFeatureWorkspace SaveFeatWorkspace, string FeatClsName, IEnvelope pDomainEnv) IFeatureWorkspaceAnno pFWSAnno = (IFeatureWorkspaceAnno)SaveFeatWorkspace; IAnnoClass pAnnoClass = (IAnnoClass)OldFeatureClass.Extension; return null; / / 将inFeatureClass要素类中所有符合pQueryFilter的要素复制到saveFeatureClass中,仅复制不做任何修改 / / 源要素类 / 存储要素类 / 过滤参数 / public bool LoadFeatureClass(IFeatureClass inFeatureClass, IFeatureClass saveFeatureClass, IQueryFilter pQueryFilter) /生成两个要素类字段的对应表 Dictionary pFieldsDict = new Dictionary(); this.GetFCFieldsDirectory(inFeatureClass, saveFeatureClass, ref pFieldsDict); IFeatureCursor pinFeatCursor = inFeatureClass.Search(pQueryFilter, false); long nCount = inFeatureClass.FeatureCount(pQueryFilter); IFeature pinFeat = pinFeatCursor.NextFeature(); IFeatureCursor psaveFeatCursor = saveFeatureClass.Insert(true); /使用IFeatureBuffer在内存中产生缓存避免多次打开,关闭数据库 IFeatureBuffer psaveFeatBuf = null; IFeature psaveFeat = null; long n = 0; while (pinFeat != null) try psaveFeatBuf = saveFeatureClass.CreateFeatureBuffer(); psaveFeat = psaveFeatBuf as IFeature; if (inFeatureClass.FeatureType = esriFeatureType.esriFTAnnotation) IAnnotationFeature pAF = (IAnnotationFeature)pinFeat; IAnnotationFeature pNAF = (IAnnotationFeature)psaveFeat; if (pAF.Annotation != null) pNAF.Annotation = pAF.Annotation; psaveFeat.Shape = pinFeat.Shape; foreach (KeyValuePair keyvalue in pFieldsDict) if (pinFeat.get_Value(keyvalue.Key).ToString() = ) if (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 IFields CloneFeatureClassFields(IFeatureClass pFeatureClass, IEnvelope pDomainEnv) IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; /根据传入的要素类,将除了shape字段之外的字段复制 long nOldFieldsCount = ; long nOldGeoIndex = (pFeatureClass.ShapeFieldName); for (int i = 0; i nOldFieldsCount; i+) if (i != nOldGeoIndex) pFieldsEdit.AddField(i); else IGeometryDef pGeomDef = new GeometryDefClass(); IGeometryDefEdit pGeomDefEdit = (IGeometryDefEdit)pGeomDef; ISpatialReference pSR = null; if (pDomainEnv != null) pSR = new UnknownCoordinateSystemClass(); pSR.SetDomain(pDomainEnv.XMin, pDomainEnv.XMax, pDomainEnv.YMin, pDomainEnv.YMax); else IGeoDataset pGeoDataset = 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字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = (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 ISpatialReference CloneSpatialReference(ISpatialReference pSrcSpatialReference) double xmin, xmax, ymin, ymax; pSrcSpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax); ISpatialReference pSR = new UnknownCoordinateSystemClass(); pSR.SetDomain(xmin, xmax, ymin, ymax); return pSR; private void GetFCFieldsDirectory(IFeatureClass pFCold,IFeatureClass pFCnew,ref Dictionary FieldsDictionary) for(int i=0;ipFCold.Fields.FieldCount;i+) string tmpstrold=(i).Name.ToUpper(); switch(tmpstrold) case OBJECTID: case SHAPE: case SHAPE_LENGTH: case SHAPE_AREA: case FID: /以上字段由系统自动生成 break; default: for(int j=0;jpFCnew.Fields.FieldCount;j+) string tmpstrnew=(j).Name.ToUpper(); if(tmpstrold=tmpstrnew) FieldsDictionary.Add(i,j); break; break;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!