Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }