ArcGIS Engine中实现图层属性数据的显示

转载于:http://blog.igevin.info/2010/08/02/wordpress/ArcGIS-Engine-display-layer-property/


本文使用下面三个方法实现图层属性数据的显示:

  1. public static DataTable ShowPropertyTable(ILayer pLayer){……}
  2. public static DataTable ShowIFeatureLayer(IFeatureLayer pLayer){……}
  3. public static DataTable ShowIRasterLayer(IRasterLayer pLayer){……}

方法1功能是将属性数据存入DataTable中,该方法将调用方法2和方法3

方法2功能是将矢量数据的属性信息存入DataTable中

方法3功能是将栅格数据的属性信息存入DataTable中

下面将分别介绍这三个方法。


1、将属性数据存入DataTable中

/// ‹summary>
/// 显示属性表
/// ‹/summary>
/// ‹param name="pLayer">选中的图层‹/param>
/// ‹returns>‹/returns>
public static DataTable ShowPropertyTable(ILayer pLayer)
{
    DataTable propertyTable = null;
    if (pLayer is IFeatureLayer)
        propertyTable = ShowIFeatureLayer((IFeatureLayer)pLayer);
    else
    {
        if (pLayer is IRasterLayer)
            propertyTable = ShowIRasterLayer((IRasterLayer)pLayer);
    }
    return propertyTable;
}

2、将矢量数据的属性信息存入DataTable中


/// ‹summary>
/// 显示FeatureLayer属性表
/// ‹/summary>
/// ‹param name="pLayer">选中的图层‹/param>
/// ‹returns>‹/returns>
public static DataTable ShowIFeatureLayer(IFeatureLayer pLayer)
{
    DataTable propertyTable = new DataTable("Feature Layer Property");
    IFeatureClass pFeatureClass = pLayer.FeatureClass;
    string shape = string.Empty;
    switch (pFeatureClass.ShapeType)
    {
        case esriGeometryType.esriGeometryPoint: shape = "Point";
            break;
        case esriGeometryType.esriGeometryPolyline: shape = "Polyline";
            break;
        case esriGeometryType.esriGeometryPolygon: shape = "Polygon";
            break;
    }
    for (int i = 0; i < pFeatureClass.Fields.FieldCount; i++)
    {
        DataColumn tempColumn = new DataColumn(pFeatureClass.Fields.get_Field(i).Name);
        propertyTable.Columns.Add(tempColumn);
    }
    IFeatureCursor pCursor = pFeatureClass.Search(null, false);
    IFeature pFeature = pCursor.NextFeature();
    int shapeIndex = pFeature.Fields.FindField("shape");
    while (pFeature != null)
    {
        DataRow tempRow = propertyTable.NewRow();
        for (int i = 0; i < pFeature.Fields.FieldCount; i++)
        {
            if (i == shapeIndex)
                tempRow[i] = shape;
            else
            {
                tempRow[i] = pFeature.get_Value(i);
            }
        }
        propertyTable.Rows.Add(tempRow);
        pFeature = pCursor.NextFeature();
    }
    return propertyTable;
}

3、将栅格数据的属性信息存入DataTable中

/// ‹summary>
/// 显示栅格图层属性表
/// ‹/summary>
/// ‹param name="pLayer">选中的图层‹/param>
/// ‹returns>‹/returns>
public static DataTable ShowIRasterLayer(IRasterLayer pLayer)
{
    IRaster pRaster = pLayer.Raster;
    IRasterProps pRasterProps = pRaster as IRasterProps;
    pRasterProps.PixelType = rstPixelType.PT_LONG;
    if (pRasterProps.PixelType == rstPixelType.PT_LONG)
    {
        IRasterBandCollection pRBCollection = pRaster as IRasterBandCollection;
        IRasterBand pRasterBand = pRBCollection.Item(0);
        ITable pRTable = pRasterBand.AttributeTable;
        DataTable propertyTable = new DataTable("Raster Layer Property");
        for (int i = 0; i < pRTable.Fields.FieldCount; i++)
        {
            DataColumn tempColumn = new DataColumn(pRTable.Fields.get_Field(i).Name);
            propertyTable.Columns.Add(tempColumn);
        }
        ICursor pCursor = pRTable.Search(null, false);
        IRow pRow = pCursor.NextRow();
        while (pRow != null)
        {
            DataRow tempRow = propertyTable.NewRow();
            for (int i = 0; i < pRow.Fields.FieldCount; i++)
                tempRow[i] = pRow.get_Value(i).ToString();
            propertyTable.Rows.Add(tempRow);
            pRow = pCursor.NextRow();
        }
        return propertyTable;
    }
    return null;
}

4、显示属性数据


通过上面的方法,我们把属性数据存入DataTable中,假设这个DataTable为TempDataTable,要显示数据,需要加一个控件DataGridView,定义变量名为TempDataGridView,然后写这句话:empDataGridView.DataSource = TempDataTable;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值