




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 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 (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 IFields CloneFeatureClassFields(IFeatureClass pFeatureClass, IEnvelope pDomainEnv) IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; /根据传入的要素类,将除了shape字段之外的字段复制 long nOldFieldsCount = pFeatureClass.Fields.FieldCount; long nOldGeoIndex = pFeatureClass.Fields.FindField(pFeatureClass.ShapeFieldName); for (int i = 0; i nOldFieldsCount; i+) if (i != nOldGeoIndex) pFieldsEdit.AddField(pFeatureClass.Fields.get_Field(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=pFCold.Fields.get_Field(i).Name.ToUpper(); switch(tmpstrold) case OBJECTID: case S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源经理招聘方向面试技巧及模拟题答案
- 羽毛紫外反射功能-洞察及研究
- 2025年机关事务管理专业知识在政府采购中的应用模拟题
- 2025年中级公墓管理员招聘面试题预测与答案详解
- 2025年碳金融产品设计与风险管理租赁方向模拟试题详解及解析
- 2025年金融投资风险管理模拟题集
- 2025年金融投资指南股票市场预测试题及答案
- 学校采购面试题目及答案
- 综合复习与测试说课稿-2025-2026学年初中数学鲁教版五四制2012九年级下册-鲁教版五四制2012
- 2025年IT公司行政岗位招聘考试全真模拟与专业解析
- 中国儿童肥胖诊断评估与管理专家共识解读 课件
- 老年人心理疏导与沟通培训
- SL631水利水电工程单元工程施工质量验收标准第3部分:地基处理与基础工程
- 2025时政试题及答案(100题)
- 数学分析1试题及答案
- 中职班主任培训学生管理
- 2025年上半年辽宁省沈阳市总工会“特邀审计专家”招聘3人重点基础提升(共500题)附带答案详解
- 《人工智能技术应用导论(第2版)》高职全套教学课件
- 供水设施智能化改造项目经济效益分析
- 《风光摄影技巧》课件
- 《Gitlab使用流程》课件
评论
0/150
提交评论