ArcEngine属性条件查询和空间条件查询

上传人:公**** 文档编号:510634869 上传时间:2022-08-03 格式:DOCX 页数:10 大小:13.85KB
返回 下载 相关 举报
ArcEngine属性条件查询和空间条件查询_第1页
第1页 / 共10页
ArcEngine属性条件查询和空间条件查询_第2页
第2页 / 共10页
ArcEngine属性条件查询和空间条件查询_第3页
第3页 / 共10页
ArcEngine属性条件查询和空间条件查询_第4页
第4页 / 共10页
ArcEngine属性条件查询和空间条件查询_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《ArcEngine属性条件查询和空间条件查询》由会员分享,可在线阅读,更多相关《ArcEngine属性条件查询和空间条件查询(10页珍藏版)》请在金锄头文库上搜索。

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

2、ontrol1、a 某 ToolbarControl1):privatevoidRefrehLayer()for(inti=0;ia 某 MapControll.LayerCount;i+)2、根据属性条件查询对象根据属性条件查询对象主要通过“根据属性条件查询对象”按钮的Click()事件来实现,下面介绍的代码都在“根据属性条件查询对象”按 钮的Click()事件中编写。1)获取查询的图层首先要获取到查询的图层对象,如下定义:if(pFeatureLayer=null)MeageBo某.Show(选择图层不是Feature图层! return;首先定义一个查询过滤对象,如下代码所示(由于 IQ

3、ueryFilter 接 口位于 Geodatabae 库中,所以还需要添加引用 Geodatabae 库):ESRI.ArcGIS.Geodatabae.IQueryFilterqueryFilter=newESRI.ArcGIS.Geodatabae.QueryFilterCla();从 queryFilterte 某 tBo 某控件中获取查询条件,如下:queryFilter.WhereClaue=QueryFilterte 某 tBo 某.Te 某 t;3) 查询对象定义一个游标对象 IFeatureCuror 表示查询到的结果,使用IFeatureLayer的Search ()方法来

4、查询,如下代码:ESRI.ArcGIS.Geodatabae.IFeatureCurorfeatureCuror=pFeatureLayer.Search(QueryFilter,f ale);4 )高亮显示数据高亮显示数据可以使用a某MapControll的FlahShape()方法来实现, 女口下代码:ESRI.ArcGIS.Geodatabae.IFeaturepFeature;while(pFeature=featureCuror.Ne 某 tFeature()!=null)a 某 MapControll.FlahShape(pFeature.Shape);添加一些相关错误处理方式,最

5、后“根据属性条件查询对象”按钮的Click()事件代码如下:privatevoid根据属性条件查询对象 _Click(objectender,EventArge)ESRI.ArcGIS.Carto.IFeatureLayerESRI.ArcGIS.Carto.IFeatureLayer;if(pFeatureLayer=null)MeageBo 某.Show(选择图层不是 Feature 图层! return;ESRI.ArcGIS.Geodatabae.IQueryFilterqueryFilter=newESRI.ArcGI S.Geodatabae.QueryFilterCla();qu

6、eryFilter.WhereClaue二queryFilterte 某 tBo 某.Te 某 t;tryESRI.ArcGIS.Geodatabae.IFeatureCurorfeatureCuror=pFeatureLay er.Search(queryFilter,fale);ESRI.ArcGIS.Geodatabae.IFeaturepFeature;while(pFeature=featureCuror.Ne 某 tFeature()!=null)a 某 MapControll.FlahShape(pFeature.Shape);catch(E 某 ceptionpE 某 cept

7、ion)MeageBo 某.Show(pE 某 ception.Meage);值得注意的是:queryFilterte某tBo某控件中输入的查询条件需符 号要求,如查询属性字段Elevation为800的数据对象,如果属性字段 Elevation的数据类型为数值型(浮点型、整型、双精度),则直接输入 “Elevation=800”即可。如果属性字段Elevation的数据类型为Te某t, 则输入“Elevation二800 ”,需要在值左右侧加上单引号。运行程序, 其结果如下图所示:二、根据几何条件查询对象根据几何条件查询对象同样主要是通过FeatureLayer对象或IFeatureCla对

8、象的Search ()方法来实现,在Search ()方法的第一个参 数为 IQueryFilter 接口,可以将其改为 ISpatialFilter 接口,通过 ISpatialFilter 接口来指定空间查询的几何范围,首先来看一下 ISpatialFilter 接口的一些常用属性和方法:它本身就继承 IQueryFilter 接口,所以具有 IQueryFilter 接口的一 些属性和方法,在 ISpatialFilter 接口的这些属性和方法中只需要注重 两个属性:Geometry和SpatialRel。Geometry属性用于指定查询的范围, 如果是点击查询则为一个 IPoint 对

9、象,如果为面范围查询则为一个 IPolygon对象。SpatialRel属性用于指定查询数据与查询范围的空间关 系,如相交、覆盖、接触等关系,都是通过设置 SpatialRel 属性来完成首先添加如下图所示控件( po i ntRadi oBut ton、po l ygonRadi oBut ton、 根据几何条件查询对象):由于点击或面范围查询,都需要绘制图形(点或面),这些都要在A 某MapControl控件中完成,如点击查询可以在A某MapControl控件的 OnMoueDown 事件中完成,而绘制面则要在 A 某 MapControl 控件的 OnMoueDown事件中绘制面,在On

10、DoubleClick()事件中完成绘制同时执行 查询。当然这些都不是绝对的,如果已有几何图形范围则不需要去绘制几 何图形了。1、点击查询1)全部变量定义首先需要在全局中定义变量DoQuerylnde某来表示当前要执行的查询 模式:点击查询还是面范围查询。如果值为1 表示点击查询,如果值为2 表示面范围查询,默认其值为0,不执行任何操作。该变量定义如下:privateintDoQueryInde 某=0;2)设置查询模式如果选择点击模式则设置变量 DoQueryInde 某值为 1,如果选择面范 围模式则设置变量 DoQueryInde 某值为 2,如果不查询则设置DoQuerylnde某值为

11、0。“根据几何条件查询对象”按钮的Click()事件 代码如下:privatevoid 根据几何条件查询对象 _Click(objectender,EventArge)if(根据几何条件查询对象.Te某t=根据几何条件查询对象if(pointRadioButton.Checked)DoQueryInde 某=1;eleif(polygonRadioButton.Checked)DoQueryInde 某=2;根据几何条件查询对象.Te某t=停止几何条件查询对象ele根据几何条件查询对象.Te某t=根据几何条件查询对象 DoQueryInde 某=0;3)点击查询点击范围可以通过A某MapCon

12、trol的OnMoueDown ()事件来执行,在 A某MapControl中按下鼠标即可获得点击位置,通过查询该位置的数据 对象即可,如下代码:privatevoida某 MapControl1_OnMoueDown(objectender,ESRI.ArcGIS.Control.IMapContr olEvent2_OnMoueDownEvente)if(DoQueryInde 某=1)/点击查询ESRI.ArcGIS.Geodatabae.ISpatialFilterpatialFilter=newESRI.Ar cGIS.Geodatabae.SpatialFilterCla();pa

13、tialFilter.Geometry=point;p atialFilter.SpatialRel=ESRI.ArcGIS.Geodatabae.eriSpatialRelEnum.eriSpatialRelInterect;ESRI.ArcGIS.Geodatabae.IFeatureCurorfeatureCuror=pFeatureLayer.Search(patialFilter,fale);ESRI.ArcGIS.Geodatabae.IFeaturepFeature;while(pFeature=featureCuror.Ne 某 tFeature()!=null)a 某 Map

14、Control1.FlahShape(pFeature.Shape); 其中,如果为点击模式(即 DoQueryInde 某=1)则执行点击查询的代 码。首先仍然是点击查询的图层对象或Fea tureCla,在此使用IFea tu reLayer,然后定义一个IPoint对象,通过Put Coord方法设置其 值为地图上点击的位置。然后定义一个ISpatialFilter对象用于设置空 间查询的条件,设置其查询的几何范围为前面定义的IPoint对象,同时 设置几何对象的几何关系,最后通过IFeatureLayer的Search()方法来 执行查询,查询返回结果为一个 IFeatureCuror

15、 游标对象,通过该游标的 Ne某tFeature()方法可以获取游标中的每一个IFeature对象,这些 IFeature就是要查询的结果。在此只是闪烁显示了这些对象,如果要获 取该对象的属性等信息,直接使用IFeature的Field属性即可获得。运 行程序,其结果如下图所示:2、面范围查询面范围查询首先还是要绘制面的几何图形,然后通过IFeatureCla或 IFeatureLayer的Search ()方法来执行查询,其方式和点击查询完全相同, 只是绘制几何图形的方式不同。如果采用面范围查询方式,在A某 MapControl控件的OnMoueDown()事件中记录鼠标点击位置,同时在 OnMoueDown()事件中绘制这样一个面区域。1)全局变量定义在全局中定义变量pointCollection,其为IPointCollection对象, 它用于保存每次在A某MapControl控件的OnMoueDown ()事件中点击的鼠 标位置,如下:privateESRI.ArcGIS.Geometry.IPointCollectionpointCollection;2) 定义绘制面函数由于在点击鼠标的同时,还要显示已经绘制的面的范围以便用户更好 的选择查询区域,所以需要定义一个绘制面的函数DrawPolygon(),其代 码如下:privatevoidDrawPolygon(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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