您的位置:首页 > 其它

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

2015-01-15 15:24 330 查看
转载于:http://blog.igevin.info/2010/08/02/wordpress/ArcGIS-Engine-display-layer-property/

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

public static DataTable ShowPropertyTable(ILayer pLayer){……}
public static DataTable ShowIFeatureLayer(IFeatureLayer pLayer){……}
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐