版权声明:本文为博主原创文章,不需博主允许即可随意转载。 https://blog.csdn.net/a_dev/article/details/83857838
用于从MapControl中获取可见图层、获取指定图层名等:
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using System.Collections.Generic;
namespace XXXX
{
/// <summary>
/// 图层类型
/// </summary>
public enum EnumFeatureLayerType
{
/// <summary>
/// 所有
/// </summary>
All,
/// <summary>
/// 点
/// </summary>
Point,
/// <summary>
/// 线
/// </summary>
Polyline,
/// <summary>
/// 面
/// </summary>
Polygon
}
/// <summary>
/// 图层工具类
/// </summary>
static class AELayerTool
{
/// <summary>
/// 获取可见要素图层
/// </summary>
/// <param name="pMapControl">地图控件</param>
/// <param name="eFeatureLayerType">类型</param>
/// <returns></returns>
public static List<IFeatureLayer> GetVisableFeatureLayer(IMapControl2 pMapControl, EnumFeatureLayerType eFeatureLayerType = EnumFeatureLayerType.All)
{
List<IFeatureLayer> lstFeatureLayer = null;
GetVisableFeatureLayer(pMapControl, ref lstFeatureLayer);
if (null != lstFeatureLayer && 0 < lstFeatureLayer.Count && EnumFeatureLayerType.All != eFeatureLayerType)
{
esriGeometryType eGeometryType = esriGeometryType.esriGeometryNull;
if (EnumFeatureLayerType.Point == eFeatureLayerType)
{
eGeometryType = esriGeometryType.esriGeometryPoint;
}
else if (EnumFeatureLayerType.Polyline == eFeatureLayerType)
{
eGeometryType = esriGeometryType.esriGeometryPolyline;
}
else if (EnumFeatureLayerType.Polygon == eFeatureLayerType)
{
eGeometryType = esriGeometryType.esriGeometryPolygon;
}
var lstTempFeatureLayer = new List<IFeatureLayer>();
foreach (var pFeatureLayer in lstFeatureLayer)
{
if (esriFeatureType.esriFTSimple != pFeatureLayer.FeatureClass.FeatureType)
continue;
if (pFeatureLayer.FeatureClass.ShapeType != eGeometryType)
continue;
lstTempFeatureLayer.Add(pFeatureLayer);
}
lstFeatureLayer.Clear();
if (0 < lstTempFeatureLayer.Count)
{
lstFeatureLayer.AddRange(lstTempFeatureLayer);
}
}
return lstFeatureLayer;
}
/// <summary>
/// 获取可见要素图层
/// </summary>
/// <param name="pMapControl">地图控件</param>
/// <returns>要素图层</returns>
public static void GetVisableFeatureLayer(IMapControl2 pMapControl, ref List<IFeatureLayer> lstFeatureLayer)
{
if (null == lstFeatureLayer) lstFeatureLayer = new List<IFeatureLayer>();
var layerCount = pMapControl.LayerCount;
for (int i = 0; i < layerCount; i++)
{
var layer = pMapControl.Layer[i];
GetVisableFeatureLayer(layer, ref lstFeatureLayer);
}
}
public static void GetVisableFeatureLayer(ILayer pLayer, ref List<IFeatureLayer> lstFeatureLayer)
{
if (null == lstFeatureLayer) lstFeatureLayer = new List<IFeatureLayer>();
if (pLayer is IFeatureLayer featureLayer)
{
if (featureLayer.Visible)
lstFeatureLayer.Add(featureLayer);
}
else
{
if (pLayer is ICompositeLayer compositeLayer)
{
var nCount = compositeLayer.Count;
for (int i = 0; i < nCount; i++)
{
GetVisableFeatureLayer(compositeLayer.Layer[i], ref lstFeatureLayer);
}
}
}
}
public static string GetFeatureClassName(IFeatureLayer pFeatureLayer)
{
return GetFeatureClassName(pFeatureLayer.FeatureClass);
}
public static string GetFeatureClassName(IFeatureClass pFeatureClass)
{
return GetTableName(pFeatureClass);
}
public static string GetTableName(IFeatureClass pFeatureClass)
{
return GetTableName(pFeatureClass as ITable);
}
public static string GetTableName(ITable pTable)
{
var sUserFeatureClassName = (pTable as IDataset).Name;
var nIndex = sUserFeatureClassName.IndexOf(".");
if (nIndex > 0) sUserFeatureClassName = sUserFeatureClassName.Substring(nIndex + 1, sUserFeatureClassName.Length - nIndex - 1);
return sUserFeatureClassName;
}
}
}