AE属性查询.docx_第1页
AE属性查询.docx_第2页
AE属性查询.docx_第3页
AE属性查询.docx_第4页
全文预览已结束

下载本文档

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

文档简介

AE属性查询查询是GIS不可或缺的功能,今天我写一下我近期对查询的理解。先说说属性查询;A查询主要涉及接口:1.IQueryFilter通过设置这个接口的WhereClause属性来作为查询条件,本属性的语句为SQL的where后的条件语句。2.IFeatureLayer矢量图层,一般由ILayer进行转化。该接口的Search方法进行查询,Search方法的参数有两个,前面的是IQueryFilter对象,后面的是bool值,一般设为false.3.IFeature要素接口,用来接收查询出来的要素。4.IFeatureCursor游标接口,通过Search进行查询,可以讲结果保存在这里,从而利用NextFeature方法,遍历所有要素。B基本的思想获取图层,设置条件,进行查询,显示要素类。C如何获取IFeatureLayer地图的图层的索引从0开始,一般通过get_Layer方法或者Layer属性获取ILayer,然后将ILayer强制转换为IFeatureLayer。D举例下面是一个整体的过程。首先定义一个方法:/查询并高亮显示/为WhereClause赋值/图层,ILayer对象publicvoidQueryAndHight(stringsql,ILayerpLayer)/查询this.axMapControl1.Map.ClearSelection();/清除地图的选择IFeatureLayerpFeatureLayer=pLayerasIFeatureLayer;/定义矢量图层IQueryFilterpQueryFilter=newQueryFilter();/实例化一个查询条件对象pQueryFilter.WhereClause=sql;/将查询条件赋值IFeatureCursorpFeatureCursor=pFeatureLayer.Search(pQueryFilter,false);/进行查询IFeaturepFeature;pFeature=pFeatureCursor.NextFeature();/此步是将游标中的第一个交给pFeatureif(pFeature=null)/判断是否查到结果/如果没有查到报错并结束MessageBox.Show(没有查询到地物!,查询提示,MessageBoxButtons.OK,MessageBoxIcon.Information);return;axMapControl1.Map.SelectFeature(pLayer,pFeature);/将查询到的地物作为选择对象高亮显示在地图上axMapControl1.CenterAt(pFeature.ShapeasESRI.ArcGIS.Geometry.IPoint);/设置当前查询到的要素为地图的中心axMapControl1.MapScale=pLayer.MinimumScale;/将当前地图的比例尺设置为ILayer的最小显示比例尺axMapControl1.ActiveView.Refresh();/刷新地图,这样才能显示出地物下面我们进行方法的调用:IlayerpLayer=axMapControl1.Map.get_Layer(0);/第一个图层,在地图中第一个图层是医院QueryAndHight(name=市一医院,pLayer);/调用函数,在医院的图层上查询name为市一医院的要素并高量显示在地图上。上面的例子有一个问题,假设我们只知道图层的名字,而不知道索引为多少,这就比较复杂了。所以我们可以提前写一个方法通过名字获得ILayer对象。publicILayerGetLayerByName(stringstrLayerName)ILayerpLayer=null;for(inti=0;i=axMapControl1.LayerCount-1;i+)if(strLayerName=axMapControl1.get_Layer(i).Name)pLayer=axMapControl1.get_Layer(i);break;returnpLayer;这样,我们就可以用以下的方法获得ILayer对象进行查询:ILayerpLayer=GetLayerByName(医院);。上面我们只是进行单要素的查询与显示,但是我们有时候需要获得多个查询结果,这样就需要用到NextFeature方法进行遍历搜索显示,我们在进行高亮显示的时候也能获取要素的属性值,可以将其保存起来。下面就是一个例子:ListstrName=newList();/用来保存name属性,这个可以换成listBox或者comoBox来接受要素的nameIFeatureLayerpFeatureLayer=mainfrm.GetLayerByName(此处为图层的名字)asIFeatureLayer;IQueryFilterpQueryFilter=newQueryFilter();pQueryFilter.WhereClause=namelike%+txtName.Text+%;/模糊查询IFeatureCursorpFeatureCursor=pFeatureLayer.Search(pQueryFilter,false);IFeaturepFeature;pFeature=pFeatureCursor.NextFeature();/获取第一个要素if(pFeature=null)/如果要素为空,则提示并返回MessageBox.Show(没有查询到+txtName.Text+,查询提示,MessageBoxButtons.OK,MessageBoxIcon.Information);return;while(pFeature!=null)strName.Add(pFeature.get_Value(pFeature.Fields.FindField(name).ToString();/将查询出的要素的name属性加到strName中/如果是listbox则可以用listBox1.items.add(.);来将name添加到listbox中。mainfrm.axMapC

温馨提示

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

评论

0/150

提交评论