您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页arcengine 要素类的复制

arcengine 要素类的复制

来源:欧得旅游网


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,未完待续 ///

/// /// /// /// /// public

IFeatureClassCloneAnnotationClassInWorkspace(IFeatureClassOldFeatureClass,

IFeatureWorkspaceSaveFeatWorkspace, string FeatClsName, IEnvelopepDomainEnv) {

IFeatureWorkspaceAnnopFWSAnno = (IFeatureWorkspaceAnno)SaveFeatWorkspace; IAnnoClasspAnnoClass = (IAnnoClass)OldFeatureClass.Extension; return null; }

///

/// 将inFeatureClass要素类中所有符合pQueryFilter的要素复制到saveFeatureClass中,仅复制不做任何修改 ///

/// 源要素类

/// 存储要素类 /// 过滤参数 /// public boolLoadFeatureClass(IFeatureClassinFeatureClass, IFeatureClasssaveFeatureClass, IQueryFilterpQueryFilter) {

//生成两个要素类字段的对应表

DictionarypFieldsDict = new Dictionary(); this.GetFCFieldsDirectory(inFeatureClass, saveFeatureClass, ref pFieldsDict); IFeatureCursorpinFeatCursor = inFeatureClass.Search(pQueryFilter, false); long nCount = inFeatureClass.FeatureCount(pQueryFilter); IFeaturepinFeat = pinFeatCursor.NextFeature();

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 (KeyValuePairkeyvalue 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 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; iif (i != nOldGeoIndex) {

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 DictionaryFieldsDictionary) {

for(inti=0;istring tmpstrold=pFCold.Fields.get_Field(i).Name.ToUpper(); switch(tmpstrold) {

case \"OBJECTID\": case \"SHAPE\":

case \"SHAPE_LENGTH\": case \"SHAPE_AREA\": case \"FID\": {

//以上字段由系统自动生成 break; } default: {

for(int j=0;j string

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务