/// <summary> /// 从指定路径(或连接字符串)中获取要素类 /// <para>①shp路径:返回该shp存储的要素类;</para> /// <para>②mdb路径:返回该mdb数据库第一个要素类;</para> /// <para>③dwg路径:返回该dwg数据集第一个要素类;</para> /// <para>④shp目录:返回目录下第一个shp文件存储的要素类;</para> /// <para>⑤gdb目录:返回gdb数据库第一个要素类;</para> /// <para>⑥mdb文件路径[\DatasetName]\FeatureClassName:返回mdb数据库中指定名称或别名的要素类;</para> /// <para>⑦gdb目录[\DatasetName]\FeatureClassName:返回gdb数据库中指定名称或别名的要素类;</para> /// <para>⑧sde或oleDb或sql连接字符串:返回数据库中的第一个要素类;</para> /// </summary> /// <param name="connStrOrPath">路径或连接字符串</param> /// <param name="autoAddExtension">是否自动在路径末尾增加.shp/.mdb/.dwg后缀,以再次查找要素类</param> /// <returns></returns> public static IFeatureClass FromPath(string connStrOrPath, bool autoAddExtension = false) { if (WorkspaceEx.IsConnectionString(connStrOrPath)) { return(FirstFromConnString(connStrOrPath)); } if (Directory.Exists(connStrOrPath)) { return(FirstFormDir(connStrOrPath)); } if (File.Exists(connStrOrPath)) { return(FirstFormFile(connStrOrPath)); } var featureClass = FirstFromFullPath(connStrOrPath); if (autoAddExtension && featureClass == null) { foreach (var extension in new[] { ".shp", ".dwg", ".mdb" }) { if (File.Exists(connStrOrPath + extension)) { return(FirstFormFile(connStrOrPath + extension)); } } } return(featureClass); }
/// <summary> /// 设置图层数据源 /// </summary> /// <param name="layer">设置数据源的图层</param> /// <param name="workspacePath">工作空间路径</param> /// <param name="dataSetName">数据集名称,数据源不在数据集中则应为null</param> /// <param name="objectName">图层关联对象的名称,即要素类名称或栅格数据集名称</param> public static void SetSourcePath(this ILayer layer, string workspacePath, string dataSetName, string objectName) { if (!WorkspaceEx.IsWorkspacePath(workspacePath) && !WorkspaceEx.IsConnectionString(workspacePath)) { throw new ArgumentException($"找不到数据源({workspacePath}),请指定正确的数据源!"); } switch (layer) { case IFeatureLayer featureLayer: if (featureLayer is IDataLayer dataLayer) { IDatasetName datasetName = (IDatasetName)dataLayer.DataSourceName; EWorkspaceType eWorkspaceType = WorkspaceEx.GetDefaultWorkspaceType(workspacePath); datasetName.WorkspaceName.WorkspaceFactoryProgID = eWorkspaceType.GetDescription(1); datasetName.WorkspaceName.PathName = workspacePath; //TODO: if (!string.IsNullOrWhiteSpace(dataSetName)) { datasetName.Category = dataSetName; } if (!string.IsNullOrWhiteSpace(objectName)) { datasetName.Name = objectName; } } break; case IRasterLayer rasterLayer: objectName = string.IsNullOrWhiteSpace(objectName) ? ((rasterLayer as IDataLayer)?.DataSourceName as IDatasetName)?.Name : objectName; if (objectName == null) { throw new Exception($"指定数据源名称(参数{nameof(objectName)})不能为空!"); } rasterLayer.CreateFromFilePath(!string.IsNullOrWhiteSpace(dataSetName) ? Path.Combine(workspacePath, dataSetName, objectName) : Path.Combine(workspacePath, objectName)); break; case IGroupLayer groupLayer: throw new Exception("该图层对象为图层组(IGroupLayer),无法设置图层组的数据源,请指定到具体的图层"); default: throw new NotImplementedException( "图层不是要素图层(IFeatureLayer),也不是栅格图层(IRasterLayer),未实现其他类型图层的数据源设置"); } }
/// <summary> /// 从指定路径(或连接字符串)中获取全部要素类 /// <para>①shp路径:返回该shp存储的要素类;</para> /// <para>②mdb路径:返回该mdb数据库的全部要素类;</para> /// <para>③dwg路径:返回该dwg数据集的全部要素类;</para> /// <para>④普通目录:返回目录下的全部shp和dwg要素类;</para> /// <para>⑤gdb目录:返回gdb数据库的全部要素类;</para> /// <para>⑥mdb文件路径[\DatasetName][\FeatureClassName]:返回mdb数据库中指定要素类,或指定数据集下的全部要素类;</para> /// <para>⑦gdb目录[\DatasetName][\FeatureClassName]:返回gdb数据库中指定要素类,或指定数据集下的全部要素类;</para> /// <para>⑧sde或oleDb或sql连接字符串:返回数据库的全部要素类;</para> /// </summary> /// <param name="connStrOrPath"></param> /// <returns></returns> public static List <IFeatureClass> AllFromPath(string connStrOrPath) { if (WorkspaceEx.IsConnectionString(connStrOrPath)) { return(FromConnString(connStrOrPath)); } if (Directory.Exists(connStrOrPath)) { return(FromDir(connStrOrPath)); } if (File.Exists(connStrOrPath)) { return(FromFile(connStrOrPath)); } return(FromFullPath(connStrOrPath)); }