在mxd中,一般圖層的名稱與其真實的
shp或影像文件名稱不相同(注記圖層一般放在mdb或gdb中,其在mxd中顯示時的名稱與其本身一樣,直接使用lyr.name即可),使用ILayer的name屬性,只能獲取此圖層在mxd中的別名,獲取文件名稱,需要將圖層先轉換成IDataLayer,將此對象的DatasourceName屬性
轉換成IDatasetName類型,然后獲取IDatasetName的Name屬性,此即為圖層的真實文件名稱。
一、所有圖層適用
//Author:AllenRobin http://gisrsman.cnblogs.com
ArrayList listName = new ArrayList(); ArrayList listAlias = new ArrayList(); string layerName = ""; string layerAliasName=""; for (int i = 0; i < mapcontrol.LayerCount; i++) { ILayer layer = mapcontrol.get_Layer(i); layerName = layer.Name; layerAliasName = layer.Name; IDataLayer2 pFd = layer as IDataLayer2; if (pFd != null) { if (pFd.DataSourceName is IDatasetName) { //獲取原始名稱 IDatasetName pDN = pFd.DataSourceName as IDatasetName; layerAliasName = pDN.Name; } } listName.Add(layerName); listAlias.Add(layerAliasName); }
二、如果僅僅是矢量圖層的話
ILayer pLayer = m_Map.get_Layer(i); //從map中取到一個ILayer對象 IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; //強轉為IFeatureLayer對象 string layerName = pFeatureLayer.FeatureClass.AliasName; //獲取別名
三、獲得IFeatureClass的Name名稱
IFeatureClass只有AliasName屬性,沒有Name屬性。需要先轉到IDataset接口。
IDataset pDataset = featureClass as IDataset; string pName = pDataset.Name;
參照:
http://www.cnblogs.com/feilong3540717/archive/2011/08/24/2151790.html
http://blog.csdn.net/muzai/article/details/5807266
