免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年郴州职业技术学院单招职业适应性考试题库附答案
- 2026年陕西省选调生招录(面向中南大学)(公共基础知识)综合能力测试题附答案解析
- 2026年辽宁理工职业大学单招职业适应性考试题库附答案
- 2025江西九江庐山市人才集团面向社会招聘森林消防员(公共基础知识)测试题带答案解析
- 2026年黔南民族幼儿师范高等专科学校单招(计算机)测试模拟题库及答案1套
- 2026年陕西省建筑工程总公司职工大学单招职业适应性测试题库及参考答案详解一套
- 2026年福州黎明职业技术学院单招(计算机)考试备考题库必考题
- 2026年重庆工贸职业技术学院单招职业技能考试模拟测试卷附答案
- 2026年达州职业技术学院单招职业适应性考试题库及参考答案详解1套
- 2026年荆门职业学院单招职业适应性考试模拟测试卷附答案
- 工程勘察设计收费标准(2002年修订本)完整版
- 小灵通漫游未来朗读指导(课件)
- JJG 821-2005总有机碳分析仪
- 超星尔雅慕课中西文化比较答案期末答案修正本
- RGF系列原子荧光光度计使用说明书
- 城投公司转型发展之路课件
- 卫生责任区划分及检查考核标准
- 城镇燃气输配工程施工及验收规范CJJ33-2005
- 《行政法与行政诉讼法》期末复习题及参考答案
- 跆拳道裁判员考试题库
- 滴灌、施工组织设计
评论
0/150
提交评论