属性查询是ArcGIS Engine二次开发中经常用到的基础功能,这里就以框选查询为例,介绍一下矢量图层的属性查询。
整个过程分为两部分,一是获取框选的要素,而是显示框选要素的属性值。
得到框选要素的方法代码如下:
/// <summary>
/// 框选数据集
/// </summary>
/// <param name="pFeatureLayer">操作图层</param>
/// <returns></returns>
private List<IFeature> RecSelectFetures(IFeatureLayer pFeatureLayer)
{
List<IFeature> pFeatures = new List<IFeature>();
if (pFeatureLayer != null)
{
IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
pFeatureSelection.Clear();
axMapControl1.Refresh();
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
IGeometry pGeometry = axMapControl1.TrackRectangle();
ISpatialFilter pSpatialFilter = new SpatialFilterClass();
pSpatialFilter.Geometry = pGeometry;
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
IFeatureCursor pFeatureCursor = pFeatureLayer.Search(pSpatialFilter, false);
IFeature pFeature = pFeatureCursor.NextFeature();
pFeatureSelection.CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew;
while (pFeature != null)
{
pFeatureSelection.Add(pFeature);
pFeatures.Add(pFeature);
pFeature = pFeatureCursor.NextFeature();
}
axMapControl1.ActiveView.Refresh();
}
return pFeatures;
}
获取并显示框选要素属性值的代码如下:
/// <summary>
/// 返回数据源
/// </summary>
/// <param name="pFeatureList">框选的数据集</param>
/// <returns></returns>
private DataTable AttributeShow(List<IFeature> pFeatureList)
{
DataTable pDataTable = new DataTable();
if (pFeatureList != null)
{
if (pFeatureList.Count > 0)
{
for (int i = 0; i < pFeatureList[0].Fields.FieldCount; i++)
{
DataColumn pDataColumn = new DataColumn();
pDataColumn.ColumnName = pFeatureList[0].Fields.get_Field(i).Name;
pDataColumn.Caption = pFeatureList[0].Fields.get_Field(i).AliasName;
pDataTable.Columns.Add(pDataColumn);
}
for (int j = 0; j < pFeatureList.Count; j++)
{
DataRow pDataRow = pDataTable.NewRow();
for (int k = 0; k < pDataTable.Columns.Count; k++)
{
int index=pFeatureList[j].Fields.FindField(pDataTable.Columns[k].ColumnName);
if (index >= 0)
{
pDataRow[k] = pFeatureList[j].get_Value(index);
}
}
pDataTable.Rows.Add(pDataRow);
}
}
}
return pDataTable;
}
其实验效果如图: