/// <summary> /// 从指定要素中获取数据插入到目标要素类中,并将图形坐标系转为与目标要素类一致 /// </summary> /// <param name="features"></param> /// <param name="targetClass"></param> public static void CopyDataToProjectShape(this IEnumerable <IFeature> features, IFeatureClass targetClass) { //获取源要素类与目标要素类相同的字段的索引,不含Shape字段 var dict = new Dictionary <int, int>(); //key:字段在源要素类的索引;value:在目标要素类中的索引 var sourceFields = features.First().Fields; var tarShapeFieldIndex = sourceFields.FindField(targetClass.ShapeFieldName); //目标要素类的Shape字段索引 for (var i = 0; i < sourceFields.FieldCount; i++) { var index1 = targetClass.FindField(sourceFields.get_Field(i).Name); if (index1 > -1 && index1 != tarShapeFieldIndex && targetClass.Fields.get_Field(index1).Editable)//获取可编辑、非Shape字段 { dict.Add(i, index1); } } CopyDataTo(features, targetClass, (sourceFeature, tarFeatureBuffer) => { //赋值非Shape字段 foreach (var pair in dict) { tarFeatureBuffer.set_Value(pair.Value, sourceFeature.get_Value(pair.Key)); } //投影变换,赋值Shape字段 var shape = sourceFeature.ShapeCopy; var spatialReference = targetClass.GetSpatialRef(); shape.Project(spatialReference); tarFeatureBuffer.Shape = shape; }); }
/// <summary> /// 复制源要素类的表结构,创建一个空的要素类 /// </summary> /// <param name="sourceClass">源要素类</param> /// <param name="targetObject">IWorkspace、IFeatureWorkspace或IFeatureDataset对象,在该对象中创建新要素类</param> /// <param name="name">新要素类名称</param> /// <param name="geoType">要素类的几何类型</param> /// <param name="aliasName">新要素类别名,值为null则别名与名字相同</param> /// <returns></returns> public static IFeatureClass CopyStruct(this IFeatureClass sourceClass, object targetObject, string name, esriGeometryType geoType, string aliasName = null) { var spatialRef = sourceClass.GetSpatialRef(); var feilds = sourceClass.CloneFeatureClassFieldsSimple(); var featureClass = Create(targetObject, name, spatialRef, geoType, feilds); if (!String.IsNullOrEmpty(aliasName)) { featureClass.RenameFeatureClassAliasName(aliasName); } return(featureClass); }
/// <summary> /// 复制源要素类的表结构,创建一个空的要素类 /// </summary> /// <param name="sourceClass">源要素类</param> /// <param name="targetFullPath">新要素类的保存路径</param> /// <param name="geoType">要素类的几何类型</param> /// <param name="aliasName">新要素类别名,值为null则别名与名字相同</param> /// <returns></returns> public static IFeatureClass CopyStruct(this IFeatureClass sourceClass, string targetFullPath, esriGeometryType geoType, string aliasName = null) { var spatialRef = sourceClass.GetSpatialRef(); var feilds = sourceClass.CloneFeatureClassFieldsSimple(); var shapeField = FieldOpt.CreateShapeField(geoType, spatialRef); ((IFieldsEdit)feilds).AddField(shapeField); var featureClass = FeatureClassEx.CreateToPath(targetFullPath, feilds); if (!String.IsNullOrEmpty(aliasName)) { featureClass.RenameFeatureClassAliasName(aliasName); } return(featureClass); }