Beispiel #1
0
        /// <summary>
        /// 向字段集添加或修改ObjectID和拥有指定几何类型与坐标系Shape字段,若字段存在且符合要求则不添加或修改
        /// (ObjectID会在不同数据源中自动转换为OID/FID/OJBECTID)
        /// </summary>
        /// <param name="fields">字段集</param>
        /// <param name="geometryType">需要添加的Shape字段存储的几何类型</param>
        /// <param name="spatialRef">需要添加的Shape字段存储的坐标系</param>
        /// <returns></returns>
        public static IFields AddBaseFields(this IFields fields, esriGeometryType geometryType, ISpatialReference spatialRef)
        {
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
            var         oidField   = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeOID);

            if (oidField == null)
            {
                fieldsEdit.AddField(CreateOidField());
            }

            var shapeField = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeGeometry);

            if (shapeField == null)
            {
                fieldsEdit.AddField(CreateShapeField(geometryType, spatialRef));
            }
            else if (shapeField.GeometryDef.GeometryType != geometryType ||
                     shapeField.GeometryDef.SpatialReference != spatialRef)
            {
                IFieldEdit shapeFieldEdit = (IFieldEdit)shapeField;
                shapeFieldEdit.GeometryDef_2 = CreateGeometryDef(geometryType, spatialRef);
            }

            return(fields);
        }
Beispiel #2
0
        /// <summary>
        /// 从字段集中查找SHAPE字段,获取SHAPE字段包含的坐标系信息
        /// </summary>
        /// <param name="fields">字段集</param>
        /// <returns></returns>
        public static ISpatialReference GetSpatialRef(this IFields fields)
        {
            var shapeField = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeGeometry);

            if (shapeField == null)
            {
                throw new Exception("字段集中不包含SHAPE字段!");
            }

            return(GetSpatialRef(shapeField));
        }
Beispiel #3
0
        /// <summary>
        /// 创建要素类
        /// </summary>
        /// <param name="obj">IWorkspace、IFeatureWorkspace或IFeatureDataset对象,在该对象中创建要素类</param>
        /// <param name="name">要素类名称(如果为shapefile,不能包含文件扩展名".shp")</param>
        /// <param name="fields">要创建的字段集(必须包含SHAPE字段),可参考<see cref="FieldOpt.CreateBaseFields"/>等方法创建字段集</param>
        /// <returns></returns>
        public static IFeatureClass Create(object obj, string name, IFields fields)
        {
            var shapeField = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeGeometry);

            if (shapeField == null)
            {
                throw new Exception($"在要创建的字段集(参数{nameof(fields)})中找不到几何字段,创建要素类时应指定几何字段以确定几何类型和坐标系!");
            }

            var geometryType = shapeField.GeometryDef.GeometryType; //几何类型
            var spatialRef   = shapeField.GetSpatialRef();          //坐标系

            return(Create(obj, name, spatialRef, esriFeatureType.esriFTSimple, geometryType, fields, null, null, ""));
        }