/// <summary>
        ///  在指定路径(shp/mdb/gdb)中创建新的要素类,并返回该要素类(注意路径中不能存在同名要素类)
        /// </summary>
        /// <param name="fullPath">
        /// 要素类的完整保存路径,包含以下情况:
        /// ①shp文件路径,创建shp文件;若shp文件所在目录不存在则自动创建;
        /// ②mdb文件路径[\DatasetName]\FeatureClassName,在mdb中或mdb的指定要素集中,创建指定名称的图层;若mdb或要素集不存在则自动创建;
        /// ③gdb目录[\DatasetName]\FeatureClassName,在gdb中或gdb的指定要素集中,创建指定名称的图层;若gdb或要素集不存在则自动创建;
        /// </param>
        /// <param name="geoType">要素类的几何类型</param>
        /// <param name="spatialRef">空间参考(坐标系),创建方法参考<see cref="SpatialRefOpt.CreateSpatialRef(int, ESrType)"/>及该方法的重载</param>
        /// <param name="otherFields">除了OID和SHAPE字段的其他字段</param>
        /// <returns></returns>
        public static IFeatureClass CreateToPath(string fullPath, esriGeometryType geoType, ISpatialReference spatialRef, IEnumerable <IField> otherFields = null)
        {
            IFields fields = FieldOpt.CreateBaseFields(geoType, spatialRef);

            fields.AddFields(otherFields);
            return(CreateToPath(fullPath, fields));
        }
Exemple #2
0
        /// <summary>
        /// 创建一个空表格(仅包含OID字段)
        /// </summary>
        /// <param name="featureWorkspace">创建表格的工作空间</param>
        /// <param name="name">表格名称</param>
        /// <returns></returns>
        public static ITable CreateTable(this IFeatureWorkspace featureWorkspace, string name)
        {
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            fieldsEdit.AddField(FieldOpt.CreateOidField());
            return(featureWorkspace.CreateTable(name, fields, null, null, ""));
        }
        /// <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);
        }
        /// <summary>
        /// 在指定目录(shp目录)或地理数据库(shp/mdb/gdb/sde/sql)中创建新的要素类,并返回该要素类(注意路径中不能存在同名要素类)
        /// </summary>
        /// <param name="geoDbPath">mdb文件路径,或shp所在文件夹路径,或gdb文件夹路径,或sde/sql数据库连接字符串</param>
        /// <param name="datasetName">要素数据集名称,若赋值为null则直接在数据库下创建要素类,否则在该要素数据集(不存在则创建)下创建要素类</param>
        /// <param name="className">需要创建的要素类名称</param>
        /// <param name="geoType">要素类的几何类型</param>
        /// <param name="spatialRef">空间参考(坐标系),创建方法参考<see cref="SpatialRefOpt.CreateSpatialRef(int, ESrType)"/>及该方法的重载</param>
        /// <param name="otherFields">除了OID和SHAPE字段的其他字段</param>
        /// <returns></returns>
        public static IFeatureClass CreateToDb(string geoDbPath, string datasetName, string className, esriGeometryType geoType,
                                               ISpatialReference spatialRef, IEnumerable <IField> otherFields = null)
        {
            var           fields    = FieldOpt.CreateFields(geoType, spatialRef, otherFields);
            var           workspace = WorkspaceEx.GetWorkSpace(geoDbPath);
            IFeatureClass featureClass;

            if (!string.IsNullOrEmpty(datasetName))
            {
                var featureDataset = workspace.GetFeatureDataset(datasetName) ?? workspace.CreateFeatureDataset(datasetName, spatialRef);
                featureClass = featureDataset.CreateFeatureClass(className, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
                Marshal.ReleaseComObject(featureDataset);
            }
            else
            {
                featureClass = Create(workspace, className, spatialRef, geoType, fields);
            }
            Marshal.ReleaseComObject(workspace);
            return(featureClass);
        }