ArcEngine方法之查询(一)_第1页
ArcEngine方法之查询(一)_第2页
ArcEngine方法之查询(一)_第3页
ArcEngine方法之查询(一)_第4页
ArcEngine方法之查询(一)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ArcEngine方法之查询(一)查询是GIS不可或缺的功能,今天我写一下我近期对查询的理解。先说说属性查询;A查询主要涉及接口:1. IQueryFilter通过设置这个接口的WhereClause属性来作 为查询条件,本属性的语句为SQL的where后的条件语 句。2. IFeatureLayer矢量图层,一般由I Layer进行转化。 该接口的Search方法进行查询,Search方法的参数有两 个,前面的 是IQueryFilter对象,后面的是bool值,一 般设为false. 3. IFeature要素接口,用来接收查询出来的要 素。4. IFeatureCursor游标接口,通过

2、Search进行查询,可以讲结果保存在这里,从而利用NextFeature方法,遍历所有要素。B基本的思想获取图层,设置条件,进行查询,显示要素 类。C如何获取IFeatureLayer地图的图层的 索引从0开始,一般通过get_Layer方法或者Layer属性 获取ILayer ,然后将ILayer强制转换为IFeatureLayero D举例下面是一个整体的过程。首先定义一个方法:/ /查询并高亮显示III III为WhereClause赋值/图 层, ILayer 对象 pub lie void QueryAndHight (string sql, ILayer pLayer) / 查询

3、this. axMapControll. Map. ClearSelection() ;/ 清除地图的选 择 IFeatureLayer pFeatureLayer = pLayer asIFeatureLayer;/ 定义 矢量图层 IQueryFilter pQueryFilter =newQueryFilter() ;/实例化一个查询条件对象pQueryFilter. WhereClause = sql;/ 将查询条件赋值IFeatureCursor pFeatureCursor =pFeatureLayer. Search(pQueryFi 11er, false) ;/ 进行查询IF

4、eature pFeature; pFeature =pFeatureCursor. NextFeature() ; ff此步是将游标中的第一个交 给 pFeatureif (pFeature 二二 null)/ 判断是否查到结果如果没有查到报错并结束MessageBox. Show(,没有查询到地物!','查询提示', MessageBoxButtons. OK, MessageBoxIcon. Information); return;axMapControll. Map. SelectFeature(pLayer, pFeature);/ X等 查询到的地物作为选

5、择对象高亮显示在地图上axMapControll. CenterAt(pFeature. Shape asESRI. ArcGIS. Geometry. IPoint) ;/设置当前查询到的要素为 地 图的中心axMapControll. MapScale =pLayer. MinimumScale;/将当前地图的比例尺设置为ILayer 的最小显示比例尺axMapControll. ActiveView. RefreshO ;/ 刷新地图,这样才 能显示出地物下面我们进行方法的调用:Ilayer pLayer=axMa.pControl 1. Map. get_Layer (0) ;/ 第一

6、个图层, 在 地 图中第一个图层是医院QueryAndHight ('name二'市一医院 '',pLayer); 调用函数,在医院的图层上查询name为市一 医院的要素并高量显示在地图上。上面的例子有一个问题, 假 设我们只知道图层的名字,而不知道索引为多少,这就比 较 复杂了。所以我们可以提前写一个方法 通过名字获得 ILayer 对象。 public ILayer GetLayerByName (string strLayerName)ILayer pLayer = null; for (int i =0; i if (strLayerName =axMa

7、pControll. get_Layer(i). Name) pLayer axMapControll. get_Layer(i);break; return这样,我们就可以用以下的方法获得ILayer 对象进行查询:ILayer pLayer=GetLayerByName ('医 院);。上面我们只是进行单要素的查询与显示,但是我 们有时候需要获得多个查询结果,这样就需要用到 NextFeature方法进行遍历搜索显示,我们在进行高亮显示 的时候也能获取要素的属性 可以将其保存起来。下面就是一个例子:一 strName=new List () ;/用来保存name属性,这个可以换成l

8、istBox或者comoBox来接受要素的 name IFeatureLayerpFeatureLayer = mainfrm. GetLayerByName (?此处为图层的名字 ')as IFeatureLayer; IQueryFilter pQueryFilter = newQueryFilter () pQueryFilter. WhereClause = 'name like 'txtName. Text +模糊查询 IFeatureCursor pFeatureCursor = pFeatureLayer. Search(pQueryFliter, fal

9、se); IFeature pFeature; pFeature = pFeatureCursor. NextFeature () ;/ 获取第一个要素 if(pFeature = null) /如果要素为空,则提 示并返回MessageBox. Show('没有查询到txtName. Text +,','查询提示',MessageBoxButtons. OK,MessageBoxIcon. Information); return; while (pFeature != null) strName. Add (pFeature. get_Va.lue (pFeature.Fields. FindField(, name,). ToStringO) ;/ 将查询出的要素 的name属性加到strName中如果是listbox则可以用 listBoxl. items. add();来将 name 添加到 listbox 中。mainfrm. a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论