ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:30.89KB ,
资源ID:8587980      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8587980.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ArcGIS Engine地图查询精品文档21页.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ArcGIS Engine地图查询精品文档21页.docx

1、ArcGIS Engine地图查询精品文档21页地图查询、统计是一个GIS系统的基本的功能模块,实际上统计功能的前提也是通过查询获取结果以文字或者图表等报表的形式展现查询结果数据。地图查询有两种类型的查询:这个工作可让学生分组负责收集整理,登在小黑板上,每周一换。要求学生抽空抄录并且阅读成诵。其目的在于扩大学生的知识面,引导学生关注社会,热爱生活,所以内容要尽量广泛一些,可以分为人生、价值、理想、学习、成长、责任、友谊、爱心、探索、环保等多方面。如此下去,除假期外,一年便可以积累40多则材料。如果学生的脑海里有了众多的鲜活生动的材料,写起文章来还用乱翻参考书吗? 1.空间查询:在地图上设置一定

2、范围,查询这一范围内的要素。例如在地图上画一范围查询这一区域内的所有消防栓,这一范围的所有消防栓高亮显示(或者其他显示方式)并展现出所有的消防栓的属性信息。课本、报刊杂志中的成语、名言警句等俯首皆是,但学生写作文运用到文章中的甚少,即使运用也很难做到恰如其分。为什么?还是没有彻底“记死”的缘故。要解决这个问题,方法很简单,每天花3-5分钟左右的时间记一条成语、一则名言警句即可。可以写在后黑板的“积累专栏”上每日一换,可以在每天课前的3分钟让学生轮流讲解,也可让学生个人搜集,每天往笔记本上抄写,教师定期检查等等。这样,一年就可记300多条成语、300多则名言警句,日积月累,终究会成为一笔不小的财

3、富。这些成语典故“贮藏”在学生脑中,自然会出口成章,写作时便会随心所欲地“提取”出来,使文章增色添辉。 2.属性查询:通过一定的查询条件获取目标要素。例如我们需要查询中国行政区上人口大于5000万,同时GDP大于1万亿的省份,通过执行查询,符号条件的省份高亮显示(或者其他显示方式)并展现出这些省份的属性信息。ArcGIS Engine9.3为开发者提供了无需写代码即可进行查询功能的Identify工具,但是这个工具是一个通用的信息查询新工具。而开发者通常需要自己开发一套符合自己业务需求更加灵活的查询功能模块,甚至一些功能不仅仅是查询信息,很多编辑编辑功能以及和业务相结合的功能开发都用到查询功能

4、。所以很有必要了解ArcGIS Engine的查询机制。要练说,得练听。听是说的前提,听得准确,才有条件正确模仿,才能不断地掌握高一级水平的语言。我在教学中,注意听说结合,训练幼儿听的能力,课堂上,我特别重视教师的语言,我对幼儿说话,注意声音清楚,高低起伏,抑扬有致,富有吸引力,这样能引起幼儿的注意。当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听

5、儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。 5.1目标.熟悉Cursor,FeatureCursor对象,使用IFeatureCursor接口.熟悉QueryFilter, SpatialFilter对象使用IQueryFilter,ISpatialFilter接口.熟悉要素选择集SelectionSet对象,会使用IFeatureSelection,ISelectionSet接口.开发一个属性查询小功能Demo, 获取符号查询条件的Feature,并IFeatureLayerDefinition接口创建一个新的要素图层

6、加载到Mapcontrol上.开发一个空间多边形查询功能的小Demo, 学会创建内存半透明图层用于显示选择范围5.2准备工作1.IDE:Visual Studio 2019/20192.ArcGIS Engine Developer kit 9.33.准备一份用于查询的的矢量数据(文章内有说明)5.3Cursor对象Cursor(游标)本质上是一个指向数据的指针,本身并不包含数据内容,它是连接到Row对象或要素对象的桥梁。 游标有三种类型,即查询游标、插入游标和更新游标。每一种游标都是通过与之相适应的方法来获得的,如Search、Insert和Update方法。更新和插入游标都需要使用一个过滤

7、器(Filter)对象,因为它们首先必须获得需要进行操作的要素。 Cursor对象支持的接口是ICursor,它定义了操作一个Row集合或一个Row对象的属性和方法,下面是获得插入型、更新型和查询型游标的方法: pCursor = IFeatureClass.Insert()使用IFeatureClass的Insert方法返回一个插入型游标,它通常用于往表中插入一条记录。 pCursor = IFeatureClass.Update()使用IFeatureClass的Update方法会返回一个更新型游标,它用于更新或者删除一条记录。 pCursor= IFeatureClass.Search(

8、)使用IFeatureClass的Sarch方法对表进行查询后,可以得到一个查询型Cursor对象,它指向一个或多个Row对象。 以我们这章的内容主要使用查询游标。 FeatureCursor是Cursor的一个子类,指向一个或多个要素,它实现了IFeatureCursor接口,ArcGIS Engine开发所对矢量图层实现查询功能都是实行IFeatureCursor。5.4QueryFilter对象与SpatialFilter对象 在关系型数据库中,查询条件是通过SQL语句的Where子语句来完成的。在ArcGIS Engine中不能直接使用SQL语句,但ArcGIS Engine提供了Qu

9、eryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。 QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。CODE:IQueryFilter pQueryFilter = new QueryFilterClass();/设置过滤器对象的属性pQueryFilter.WhereClause = 人口 10000000; SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承 IQueryFilter接口)接口从而实现空

10、间查询功能。 CODE:ISpatialFilter pSpatialFilter = new SpatialFilterClass();/设置空间过滤器的范围(多边形)pSpatialFilter.Geometry = pGeometry;/设置空间过滤器空间关系类型pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains; 空间过滤器空间关系类型主要有以下几种类型如表一所示:表1空间过滤器空间关系类型描述(A是待查询图形,B是过滤条件图形)esriSpatialRelUndefined未定义esriSpati

11、alRelIntersectsA与B图形相交esriSpatialRelEnvelopeIntersectsA的Envelope和B的Envelope相交esriSpatialRelIndexIntersectsA与B索引相交esriSpatialRelTouches与B边界相接esriSpatialRelOverlapsA与B相叠加esriSpatialRelCrossesA与B相交(两条线相交于一点,一条线和一个面相交)esriSpatialRelWithinA在B内esriSpatialRelContainsA包含BesriSpatialRelRelationA与B空间关联5.5Sele

12、ctionSet要素选择集对象熟悉ArcGIS Desktop使用的开发者一定会知道当在ArcMap中显示查询结果的时,所有的符号查询调教的要素都以蓝色高亮的形式显示在地图控件上,蓝色高亮显示表示高亮选中,这些高亮显示选中的要素对应一个要素选择集对象中。通过IFeatureSelection的SelectionSet属性可以获取选择集,FeatureLayer对象实现了IFeatureSelection接口。实现代码如下:IFeatureLayerpFeatureLayer =this.axMapControl1.get_Layer(0)asIFeatureLayer;/QI至IFeature

13、SelectionIFeatureSelectionpFeatureSelection = pFeatureLayerasIFeatureSelection; /创建过滤器IQueryFilterpQueryFilter =newQueryFilterClass(); /设置过滤器对象的查询条件pQueryFilter.WhereClause =人口 10000000;/选择要素pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false); /获取选择集对象

14、ISelectionSetpSelectinSet=pFeatureSelection.SelectionSet;/设置选择集的符号pFeatureSelection.SelectionSymbol = pSymbol;5.6属性查询实例5.6.1程序实现目标:查询人口大于5000000的城市,并把查询结果创建为一个新的图层,如图1-3所示:代码片段如下:CODE:private void button1_Click(object sender, EventArgs e)IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0)

15、as IFeatureLayer; /QI到FeatureSelection IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection; /创建过滤器IQueryFilter pQueryFilter = new QueryFilterClass(); /设置过滤器对象的查询条件pQueryFilter.WhereClause = 人口 5000000;/根据查询条件选择要素pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultE

16、num.esriSelectionResultNew, false); /QI到ISelectionSetISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;if (pSelectionSet.Count 0)IFeatureLayerDefinition pFDefinition = pFeatureLayer as IFeatureLayerDefinition; /创建新图层IFeatureLayer pNewFeatureLayer = pFDefinition.CreateSelectionLayer(newlay

17、erName, true, null, null);pNewFeatureLayer.Name = 查询结果城市;axMapControl1.AddLayer(pNewFeatureLayer as ILayer);5.7空间查询实例5.7.1目标 实现多边形查询功能5.7.2功能开发 代码片段如下:引用的命名空间:codeusing System;using System.Drawing;using System.Collections;using SystemponentModel;using System.Windows.Forms;using System.Data;using Sys

18、tem.IO;using System.Runtime.InteropServices;using System.Collections.Generic;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.ADF;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Geometry;using ESRI.

19、ArcGIS.DataSourcesGDB;/在程序运行时的内存中创建矢量要素层,并加到地图控件最顶端/ /地图控件/IFeatureLayer 新加的要素层privateIFeatureLayer AddFeatureLayerByMemoryWS(AxMapControl pMapCtrl,ISpatialReference pSReference) try if (pMapCtrl = null) return null;#region创建新的内存工作空间IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();IWorks

20、paceName pWSName = pWSF.Create(, Temp, null, 0);IName pName = (IName)pWSName;IWorkspace pMemoryWS = (IWorkspace)pName.Open();#endregionIField Field = new FieldClass();IFields Fields = new FieldsClass();IFieldsEdit FieldsEdit = null;IFieldEdit FieldEdit = null;IFeatureClass FeatureClass = null;IFeatu

21、reLayer FeatureLayer = null;tryFieldsEdit = oFields as IFieldsEdit;oFieldEdit = oField as IFieldEdit;oFieldEdit.Name_2 = OBJECTID;oFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;oFieldEdit.IsNullable_2 = false;oFieldEdit.Required_2 = false;oFieldsEdit.AddField(oField);oField = new FieldClass();oF

22、ieldEdit = oField as IFieldEdit;IGeometryDef pGeoDef = new GeometryDefClass();IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;pGeoDefEdit.AvgNumPoints_2 = 5;pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;pGeoDefEdit.GridCount_2 = 1;pGeoDefEdit.HasM_2 = false;pGeoDefEdit.H

23、asZ_2 = false;pGeoDefEdit.SpatialReference_2 = pSReference;oFieldEdit.Name_2 = SHAPE;oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;oFieldEdit.GeometryDef_2 = pGeoDef;oFieldEdit.IsNullable_2 = true;oFieldEdit.Required_2 = true;oFieldsEdit.AddField(oField);oField = new FieldClass();oFieldEdi

24、t = oField as IFieldEdit;oFieldEdit.Name_2 = Code;oFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;oFieldEdit.IsNullable_2 = true;oFieldsEdit.AddField(oField);/创建要素类oFeatureClass = (pMemoryWS as IFeatureWorkspace).CreateFeatureClass(Temp, oFields, null, null, esriFeatureType.esriFTSimple,

25、 SHAPE, );oFeatureLayer = new FeatureLayerClass();oFeatureLayer.Name = TransTemp;oFeatureLayer.FeatureClass = oFeatureClass;/创建唯一值符号化对象IUniqueValueRenderer pURender = new UniqueValueRendererClass();pURender.FieldCount = 1;pURender.set_Field(0, Code);pURender.UseDefaultSymbol = false;ISimpleFillSymbo

26、l pFillSym = new SimpleFillSymbolClass();pFillSym.Style. = esriSimpleFillStyle.esriSFSSolid;/半透明颜色IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 255;pFillSym.Color = pColor;pURender.AddValue(1, , pFillSym as ISymbol);pFillSym = new SimpleFillSymbolClass();pFillSym.Style. = es

27、riSimpleFillStyle.esriSFSSolid;/唯一值符号化内存图层(oFeatureLayer as IGeoFeatureLayer).Renderer = pURender as IFeatureRenderer;ILayerEffects pLyrEffect = oFeatureLayer as ILayerEffects;/透明度pLyrEffect.Transparency = 80;catch(Exception Err) MessageBox.Show(Err.Message);finally tryystem.Runtime.InteropServices.

28、Marshal.ReleaseComObject(oField);System.Runtime.InteropServices.Marshal.ReleaseComObject(oFields);System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldsEdit);System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldEdit);System.Runtime.InteropServices.Marshal.ReleaseComObject(pName);Sy

29、stem.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSName);System.Runtime.InteropServices.Marshal.ReleaseComObject(pMemoryWS);System.Runtime.InteropServices.Marshal.ReleaseComObject(oFeatureClass);catchGC.Collect(); return oFeatureLayer;catch (Exception Err)MessageBox.Show(Err.Message, 提示, MessageBoxButtons.OK, MessageBoxIconrmation);return null;CODE:/ 在地图控件上添加透明临时图元/ / 地图控件/ Envelope或Polygon几何实体/ 是否清除原有内容publicvoid AddTransTempEle(AxMapControl pMapCtrl, IGeometry pG

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1