1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > arcgis engine 将图层要素复制到另一个图层

arcgis engine 将图层要素复制到另一个图层

时间:2022-10-31 04:03:29

相关推荐

arcgis engine 将图层要素复制到另一个图层

/// <summary>

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

/// </summary>

/// <param name="inFeatureClass">源要素类</param>

/// <param name="saveFeatureClass">存储要素类</param>

/// <param name="pQueryFilter">过滤参数</param>

/// <returns></returns>

public bool LoadFeatureClass(IFeatureClass inFeatureClass, IFeatureClass saveFeatureClass, IQueryFilter pQueryFilter)

{

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

Dictionary<int, int> pFieldsDict = new Dictionary<int, int>();

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<int, int> 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 void GetFCFieldsDirectory(IFeatureClass pFCold, IFeatureClass pFCnew, ref Dictionary<int, int> FieldsDictionary)

{

for (int i = 0; i < pFCold.Fields.FieldCount; i++)

{

string 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 < pFCnew.Fields.FieldCount; j++)

{

string tmpstrnew = pFCnew.Fields.get_Field(j).Name.ToUpper();

if (tmpstrold == tmpstrnew)

{

FieldsDictionary.Add(i, j);

break;

}

}

break;

}

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。