空间数据查询按查询方式来分, 主要分为两类: 根据属性条件查询对象和根据几何条件 查询对象。无论是根据属性还是根据几何来查询对象,都必须设置相应的查询条件。在 ArcGIS Engine 中, FeatureLayer 对象和 IFeatureClass 对象有一个 Search()方法专门用于空间 数据查询,同时 ArcGIS Engine 中提供了一个 IQueryFilter 接口来设置查询的条件(属性条 件和几何条件)。首先来看一下 IFeatureLayer 接口的 Search()方法,其定义如下:
public IFeatureCursor Search (IQueryFilter queryFilter, bool recycling);
该方法有两个参数:第一个参数 queryFilter 为一个 IQueryFilter 对象,用于指定查询的条件 了;第二个参数recycling 为一个 Bool 数据类型,表示查询结果游标是否循环。该方法的返 回值为一个 IFeatureCursor 对象,该游标对象表示查询的结果对象。下面就分别根据属性条 件查询对象和根据几何条件查询对象来介绍空间数据查询的过程:
一、根据属性条件查询对象
首先新建一个项目,设置项目名称为 “空间数据查询 ”,并在窗体上添加如下图所示控件
(axMapControl1、axTOCControl1、axLicenseControl1、axToolbarControl1):
同 时 为 了 便 于 设 置 条 件 来 查 询 对 象 , 添 加 如 下 图 所 示 控 件 ( layerComboBox 、 queryFiltertextBox 和根据属性条件查询对象):
在每次添加新数据或者打开新地图时,都要更新 layerComboBox 控件中的显示项来表示当前 地图中的图层。定义刷新图层函数RefreshLayer(),其代码如下:
private void RefreshLayer()
{
layerComboBox.Items.Clear();
for (int i = 0; i < axMapControl1.LayerCount; i++)
{空间音乐查询
layerComboBox.Items.Add(axMapControl1.get_Layer(i).Name);
}
layerComboBox.Text = layerComboBox.Items[0].ToString();
}
2、根据属性条件查询对象
根据属性条件查询对象主要通过“根据属性条件查询对象”按钮的 Click()事件来实现,下 面介绍的代码都在“根据属性条件查询对象”按钮的Click()事件中编写。 1)获取查询的图层
首先要获取到查询的图层对象,如下定义:
ESRI.ArcGIS.Carto.IFeatureLayer
as
pFeatureLayer=axMapControl1.get_Layer(layerComboBox.SelectedIndex)ESRI.ArcGIS.Carto.IFeatureLayer;
if (pFeatureLayer == null)
{
MessageBox.Show("选择图层不是 Feature 图层! ");
return;
}
如上代码中,定义一个 IFeatureLayer 对象,该图层对象即为 layerComboBox 控件中选择的 图层,如果该图层不是 FeatureLayer,则返回。
2)定义查询条件
首先定义一个查询过滤对象,如下代码所示(由于IQueryFilter 接口位于 Geodatabase 库中, 所以还需要添加引用 Geodatabase 库):
ESRI.ArcGIS.Geodatabase.IQueryFilter
ESRI.ArcGIS.Geodatabase.QueryFilterClass();
queryFilter
=
new
从 queryFiltertextBox 控件中获取查询条件,如下:
queryFilter.WhereClause = queryFiltertextBox.Text;
3)查询对象
定义一个游标对象 IFeatureCursor 表示查询到的结果,使用IFeatureLayer 的 Search()方法来 查询,如下代码:
ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = pFeatureLayer.Search(queryFilter, false);
4)高亮显示数据
发布评论