コード例 #1
0
        /// <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;
            });
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }