/// <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)); }
/// <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); }