/// <summary> /// 获取一个图层数据源所在的要素数据集 /// </summary> /// <returns></returns> private static string GetLayerFeatureDataset(IDataLayer dataLayer) { string datasetName = null; try { IDatasetName2 datasetName2 = (IDatasetName2)dataLayer.DataSourceName; IEnumDatasetName enumDatasetName = datasetName2.ControllerNames[esriDatasetType.esriDTFeatureDataset]; IDatasetName ds = enumDatasetName.Next(); datasetName = ds.Name; } catch { } return(datasetName); }
/// <summary> /// 获取图层数据源完整路径 /// </summary> /// <param name="layer"></param> /// <returns></returns> public static string GetSourcePath(this ILayer layer) { switch (layer) { case IFeatureLayer featureLayer: if (featureLayer is IDataLayer dataLayer) { IDatasetName2 datasetName = (IDatasetName2)dataLayer.DataSourceName; var dataSourceType = featureLayer.DataSourceType.ToLower(); var extension = string.Empty; if (dataSourceType.Contains("shapefile")) { extension = ".shp"; } else if (dataSourceType.Contains("cad")) { extension = ".dwg"; } var featureDatasetName = GetLayerFeatureDataset(dataLayer); if (featureDatasetName == null) { return(Path.Combine(datasetName.WorkspaceName.PathName, datasetName.Name + extension)); } else { return(Path.Combine(datasetName.WorkspaceName.PathName, featureDatasetName, datasetName.Name + extension)); } } break; case IRasterLayer rasterLayer: return(rasterLayer.FilePath); case IGroupLayer groupLayer: throw new Exception("该图层对象为图层组(IGroupLayer),无法获取图层组的数据源,请指定到具体的图层"); default: throw new NotImplementedException("图层不是要素图层(IFeatureLayer),也不是栅格图层(IRasterLayer),未实现其他类型图层的数据源获取"); } return(null); }