空间数据查询

上传人:桔**** 文档编号:513057363 上传时间:2023-04-20 格式:DOC 页数:7 大小:57.50KB
返回 下载 相关 举报
空间数据查询_第1页
第1页 / 共7页
空间数据查询_第2页
第2页 / 共7页
空间数据查询_第3页
第3页 / 共7页
空间数据查询_第4页
第4页 / 共7页
空间数据查询_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《空间数据查询》由会员分享,可在线阅读,更多相关《空间数据查询(7页珍藏版)》请在金锄头文库上搜索。

1、空间数据查询按查询方式来分, 主要分为两类: 根据属性条件查询对象和根据几何条件 查询对象。无论是根据属性还是根据几何来查询对象,都必须设置相应的查询条件。在ArcGIS Engine中,FeatureLayer对象和IFeatureClass对象有一个Search()方法专门用于空间 数据查询,同时 ArcGIS Engine 中提供了一个 IQueryFilter 接口来设置查询的条件(属性条 件和几何条件)。首先来看一下 IFeatureLayer接口的Search()方法,其定义如下: public IFeatureCursor Search (IQueryFilter queryFi

2、lter, bool recycling);该方法有两个参数:第一个参数 queryFilter 为一个 IQueryFilter 对象,用于指定查询的条件 了;第二个参数 recycling 为一个 Bool 数据类型,表示查询结果游标是否循环。该方法的返 回值为一个 IFeatureCursor 对象,该游标对象表示查询的结果对象。下面就分别根据属性条 件查询对象和根据几何条件查询对象来介绍空间数据查询的过程: 一、根据属性条件查询对象首先新建一个项目,设置项目名称为 “空间数据查询 ”,并在窗体上添加如下图所示控件 (axMapControl1 、 axTOCControl1 、 axL

3、icenseControl1 、axToolbarControl1 ): 同时为了便于设置条件来查询对象, 添加如 下图所示控件( layerComboBox 、 queryFiltertextBox 和根据属性条件查询对象): 其中, layerComboBox 控件用于表示要查询的图层, queryFiltertextBox 控件表示查询的条件。1、定义刷新图层函数在每次添加新数据或打开新地图时,都要更新 layerComboBox 控件中的显示项来表示当前 地图中的图层。定义刷新图层函数 RefreshLayer() ,其代码如下:private void RefreshLayer()l

4、ayerComboBox.Items.Clear();for (int i = 0; i axMapControl1.LayerCount; i+)layerComboBox.Items.Add(axMapControl1.get_Layer(i).Name);layerComboBox.Text = layerComboBox.Items0.ToString();2、根据属性条件查询对象根据属性条件查询对象主要通过“根据属性条件查询对象”按钮的Click() 事件来实现,下面介绍的代码都在“根据属性条件查询对象”按钮的 Click() 事件中编写。1) 获取查询的图层 首先要获取到查询的图层

5、对象,如下定义:ESRI.ArcGIS.Carto. IFeatureLayeraspFeatureLayer=axMapControl1.get_Layer(layerComboBox.SelectedIndex)ESRI.ArcGIS.Carto. IFeatureLayer;if (pFeatureLayer = null)MessageBox.Show( 选择图层不是 Feature 图层! );return;如上代码中,定义一个 IFeatureLayer 对象,该图层对象即为 layerComboBox 控件中选择的 图层,如果该图层不是FeatureLayer,则返回。2) 定义

6、查询条件首先定义一个查询过滤对象,如下代码所示(由于IQueryFilter接口位于 Geodatabase库中,所以还需要添加引用Geodatabase库):ESRI.ArcGIS.Geodatabase.IQueryFilterqueryFilter=newESRI.ArcGIS.Geodatabase.QueryFilterClass();从 queryFiltertextBox 控件中获取查询条件 ,如下:queryFilter.WhereClause = queryFiltertextBox.Text;3) 查询对象定义一个游标对象IFeatureCursor表示查询到的结果,使用I

7、FeatureLayer的Search。方法来查询,如下代码:ESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = pFeatureLayer.Search(queryFilter, false);4)高亮显示数据 高亮显示数据可以使用 axMapControll的FlashShape(方法来实现,如下代码:ESRI.ArcGIS.Geodatabase.IFeature pFeature ;while(pFeature= featureCursor.NextFeature()!=null)axMapControl1.FlashShape

8、(pFeature.Shape);添加一些相关错误处理方式,最后根据属性条件查询对象”按钮的Click()事件代码如下:private void 根据属性条件查询对象 _Click(object sender, EventArgs e)ESRI.ArcGIS.Carto.IFeatureLayer pFeatureLayer=axMapControl1.get_Layer(layerComboBox.SelectedIndex) asESRI.ArcGIS.Carto.IFeatureLayer;if (pFeatureLayer = null)MessageBox.Show(“选择图层不是

9、Feature图层! “);return;ESRI.ArcGIS.Geodatabase.IQueryFilter queryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilterClass(); queryFilter.WhereClause = queryFiltertextBox.Text;tryESRI.ArcGIS.Geodatabase.IFeatureCursor featureCursor = pFeatureLayer.Search(queryFilter, false);ESRI.ArcGIS.Geodatabase.IFeatur

10、e pFeature;while (pFeature = featureCursor.NextFeature() != null) axMapControl1.FlashShape(pFeature.Shape);catch (Exception pException)MessageBox.Show(pException.Message);值得注意的是: queryFiltertextBox 控件中输入的查询条件需符号要求,如查询属性字段 Elevation 为 800的数据对象,如果属性 字段Elevation的数据类型为数值型(浮点型、整型、双精度),则直接输入“Elevation = 8

11、00即可。如果属性字段 Elevation的数据类型为Text,则输入“Elevation = ,800?,需要在值左右侧加上单引号。运行程序,其结果如下图所示:二、根据几何条件查询对象根据几何条件查询对象同样主要是通过FeatureLayer对象或IFeatureClass对象的Search。方法来实现,在 Search。方法的第一个参数为 IQueryFilter 接口,可以将其改为 ISpatialFilter 接口,通过 ISpatialFilter 接口来指定空间查询的几何范围,首先来看一下 ISpatialFilter 接口的一些常用属性和方法:它本身就继承 IQueryFilte

12、r 接口,所以具有 IQueryFilter 接口的一些属性和方法, 在 ISpatialFilter 接口的这些属性和方法中只需要注重两个属性:Geometry和SpatialRel。Geometry属性用于指定查询的范围,如果是点击查询则为一个IPoint对象,如果为面范围查询则为一个IPolygon对象。SpatialRel属性用于指定查询数据与查询范围的空间关系,如相交、覆盖、接触等关系,都是通 过设置 SpatialRel 属性来完成。首先添加如下图所示控件( pointRadioButton 、 polygonRadioButton 、根据几何条件查询对象) :由于点击或面范围查询

13、,都需要绘制图形(点或面) ,这些都要在 AxMapControl 控件中完成,如点击查询可以在 AxMapControl 控件的 OnMouseDown 事件中完成,而绘制面则要在 AxMapControl 控件的 OnMouseDown 事件中绘制面,在 OnDoubleClick() 事件中完成绘制同时执行查询。当然这些都不是绝对的,如果已有几何图形范围则不需要去绘制几何图形了。1、点击查询1) 全部变量定义首先需要在全局中定义变量 DoQueryIndex 来表示当前要执行的查询模式: 点击查询还是面范围查询。 如果值为 1 表示点击查询, 如果值为 2 表示面范围查询,默认其值为 0

14、,不执行任何操作。该变量定义如下:private int DoQueryIndex = 0;2) 设置查询模式如果选择点击模式则设置变量 DoQueryIndex 值为 1,如果选择面范围模式则设置变量 DoQueryIndex 值为 2,如果不查询则设置DoQueryIndex 值为 0。 “根据几何条件查询对象 ”按钮的 Click() 事件代码如下:private void 根据几何条件查询对象 _Click(object sender, EventArgs e)if (根据几何条件查询对象 .Text = 根据几何条件查询对象 )if (pointRadioButton.Checked

15、)DoQueryIndex = 1;else if (polygonRadioButton.Checked)DoQueryIndex = 2; 根据几何条件查询对象 .Text = 停止几何条件查询对象 ;else根据几何条件查询对象 .Text = 根据几何条件查询对象 ;DoQueryIndex = 0;3) 点击查询点击范围可以通过 AxMapControl 的 OnMouseDown() 事件来执行,在 AxMapControl 中按下鼠标即可获得点击位置,通过查询该 位置的数据对象即可,如下代码:private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)if (DoQueryIndex = 1)/ 点击查询ESRI.ArcGIS.Carto.IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(layerComboBox.SelectedIndex) asESRI

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号