创建要素FeatureClass

来源:互联网 发布:工行黄金交易软件 编辑:程序博客网 时间:2024/05/23 11:52
创建要素数据
 /// <summary>        /// 在数据集下创建图层        /// </summary>        /// <param name="featureClassName">图层名称</param>        /// <param name="dicFields">属性结构</param>        /// <param name="pfeaturedataset">数据集名称</param>        /// <param name="classExtensionUID">类型UID</param>        /// <param name="featureWorkspace">工作空间</param>        /// <param name="spatialRef">空间参考</param>        /// <param name="esrigeomtryType">几何类型</param>        /// <returns></returns>        public static IFeatureClass CreateFeatureClass(string featureClassName, Dictionary<string, string> dicFields, IFeatureDataset pfeaturedataset, UID classExtensionUID, IFeatureWorkspace featureWorkspace, esriGeometryType esrigeomtryType, ISpatialReference spatialRef)        {            IFeatureClass featureClass = null;            featureClass = ExitFeatureClass((IWorkspace)featureWorkspace, featureClassName, esriDatasetType.esriDTFeatureClass);            if (featureClass != null)            {                return featureClass;            }            try            {                //创建要素类的字段集合                IFields fields = new FieldsClass();                IFieldsEdit fieldsEdit = (IFieldsEdit)fields;                if (dicFields != null && dicFields.Count == 0)                {                    return null;                }                foreach (var item in dicFields)                {                    fieldsEdit.AddField(BuildField(item.Key, item.Value));                }                #region 添加Shape字段                //添加Shape字段                IGeometryDef geometryDef = new GeometryDefClass();                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;                geometryDefEdit.GeometryType_2 = esrigeomtryType;                geometryDefEdit.SpatialReference_2 = spatialRef;                IField geometryField = new FieldClass();                IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;                geometryFieldEdit.Name_2 = "Shape";                geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                geometryFieldEdit.GeometryDef_2 = geometryDef;                fieldsEdit.AddField(geometryField);                #endregion                //创建一个Validated Fields集合                IFieldChecker fieldChecker = new FieldCheckerClass();                IEnumFieldError enumFieldError = null;                IFields validatedFields = null;                fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;                fieldChecker.Validate(fields, out enumFieldError, out validatedFields);                featureClass = pfeaturedataset.CreateFeatureClass(featureClassName, validatedFields, null, classExtensionUID,               esriFeatureType.esriFTSimple, "Shape", "");                return featureClass;            }            catch (Exception ex)            {            }            return null;        }
 /// <summary>       /// 创建属性结构       /// </summary>       /// <param name="fldname">属性结构名称</param>       /// <param name="fldtype">属性结构字段类型</param>       /// <returns></returns>        private static IField BuildField(string fldname, string fldtype)        {            IFields fields = new FieldsClass();            IField oidField = new FieldClass();            IFieldEdit oidFieldEdit = (IFieldEdit)oidField;            oidFieldEdit.Name_2 = fldname;            switch (fldtype.ToString().ToLower())            {                case "objectid":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;                    break;                case "longinteger":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;                    break;                case "shortinteger":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;                    break;                case "text":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;                    oidFieldEdit.Length_2 = 50;                    break;                case "double":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;                    break;                case "geometry":                    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                    break;            }            return oidField;        }

欢迎扫描微信订阅号:


0 0
原创粉丝点击