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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

ArcGIS Engine基础开发教程5学习地图输出.docx

1、ArcGIS Engine基础开发教程5学习地图输出ArcGIS Engine基础开发教程(5)学习地图查询 地图查询 地图查询、统计是一个GIS系统的基本的功能模块,实际上统计功能的前提也是通过查询获取结果以文字或者图表等报表的形式展现查询结果数据。地图查询有两种类型的查询:1.空间查询:在地图上设置一定范围,查询这一范围内的要素。例如在地图上画一范围查询这一区域内的所有消防栓,这一范围的所有消防栓高亮显示(或者其他显示方式)并展现出所有的消防栓的属性信息。2.属性查询:通过一定的查询条件获取目标要素。例如我们需要查询中国行政区上人口大于5000万,同时GDP大于1万亿的省份,通过执行查询,

2、符号条件的省份高亮显示(或者其他显示方式)并展现出这些省份的属性信息。ArcGIS Engine9.3为开发者提供了无需写代码即可进行查询功能的Identify工具,但是这个工具是一个通用的信息查询新工具。而开发者通常需要自己开发一套符合自己业务需求更加灵活的查询功能模块,甚至一些功能不仅仅是查询信息,很多编辑编辑功能以及和业务相结合的功能开发都用到查询功能。所以很有必要了解ArcGIS Engine的查询机制。5.1目标.熟悉Cursor,FeatureCursor对象,使用IFeatureCursor接口.熟悉QueryFilter, SpatialFilter对象使用IQueryFilt

3、er,ISpatialFilter接口.熟悉要素选择集SelectionSet对象,会使用IFeatureSelection,ISelectionSet接口.开发一个属性查询小功能Demo, 获取符号查询条件的Feature,并IFeatureLayerDefinition接口创建一个新的要素图层加载到Mapcontrol上.开发一个空间多边形查询功能的小Demo, 学会创建内存半透明图层用于显示选择范围5.2准备工作1.IDE:Visual Studio 2005/20082.ArcGIS Engine Developer kit 9.33.准备一份用于查询的的矢量数据(文章内有说明)5.3

4、Cursor对象Cursor(游标)本质上是一个指向数据的指针,本身并不包含数据内容,它是连接到Row对象或要素对象的桥梁。 游标有三种类型,即查询游标、插入游标和更新游标。每一种游标都是通过与之相适应的方法来获得的,如Search、Insert和Update方法。更新和插入游标都需要使用一个过滤器(Filter)对象,因为它们首先必须获得需要进行操作的要素。 Cursor对象支持的接口是ICursor,它定义了操作一个Row集合或一个Row对象的属性和方法,下面是获得插入型、更新型和查询型游标的方法: pCursor = IFeatureClass.Insert()使用IFeatureCla

5、ss的Insert方法返回一个插入型游标,它通常用于往表中插入一条记录。 pCursor = IFeatureClass.Update()使用IFeatureClass的Update方法会返回一个更新型游标,它用于更新或者删除一条记录。 pCursor= IFeatureClass.Search()使用IFeatureClass的Sarch方法对表进行查询后,可以得到一个查询型Cursor对象,它指向一个或多个Row对象。 以我们这章的内容主要使用查询游标。 FeatureCursor是Cursor的一个子类,指向一个或多个要素,它实现了IFeatureCursor接口,ArcGIS Engi

6、ne开发所对矢量图层实现查询功能都是实行IFeatureCursor。5.4QueryFilter对象与SpatialFilter对象 在关系型数据库中,查询条件是通过SQL语句的Where子语句来完成的。在ArcGIS Engine中不能直接使用SQL语句,但ArcGIS Engine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。 QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。1. 2. IQueryFilter pQueryFilter = n

7、ew QueryFilterClass();3. 4. 5. /设置过滤器对象的属性6. pQueryFilter.WhereClause = 人口 10000000;复制代码 SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承 IQueryFilter接口)接口从而实现空间查询功能。1. 2. ISpatialFilter pSpatialFilter = new SpatialFilterClass();3. 4. 5. /设置空间过滤器的范围(多边形)6. pSpatialFilter.Geometry = pGeometry;7

8、. 8. 9. /设置空间过滤器空间关系类型10. pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;复制代码空间过滤器空间关系类型主要有以下几种类型如表一所示:表1空间过滤器空间关系类型描述(A是待查询图形,B是过滤条件图形)esriSpatialRelUndefined未定义esriSpatialRelIntersectsA与B图形相交esriSpatialRelEnvelopeIntersectsA的Envelope和B的Envelope相交esriSpatialRelIndexIntersects

9、A与B索引相交esriSpatialRelTouches与B边界相接esriSpatialRelOverlapsA与B相叠加esriSpatialRelCrossesA与B相交(两条线相交于一点,一条线和一个面相交)esriSpatialRelWithinA在B内esriSpatialRelContainsA包含BesriSpatialRelRelationA与B空间关联5.5SelectionSet要素选择集对象熟悉ArcGIS Desktop使用的开发者一定会知道当在ArcMap中显示查询结果的时,所有的符号查询调教的要素都以蓝色高亮的形式显示在地图控件上,蓝色高亮显示表示高亮选中,这些高

10、亮显示选中的要素对应一个要素选择集对象中。通过IFeatureSelection的SelectionSet属性可以获取选择集,FeatureLayer对象实现了IFeatureSelection接口。实现代码如下:IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;/QI至IFeatureSelectionIFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection; /创建过滤器IQueryFilter

11、pQueryFilter = new QueryFilterClass(); /设置过滤器对象的查询条件pQueryFilter.WhereClause = 人口 10000000;/选择要素pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew,false); /获取选择集对象ISelectionSet pSelectinSet=pFeatureSelection.SelectionSet;/设置选择集的符号pFeatureSelection.Selection

12、Symbol = pSymbol;5.6属性查询实例5.6.1程序实现目标:查询人口大于5000000的城市,并把查询结果创建为一个新的图层,如图1-3所示: 下载 (77.83 KB)2009-5-31 22:45 图1下载 (94.15 KB)2009-5-31 22:45 图2下载 (61.71 KB)2009-5-31 22:45 图3代码片段如下:1. 2. private void button1_Click(object sender, EventArgs e)3. 4. IFeatureLayer pFeatureLayer = this.axMapControl1.get_L

13、ayer(0) as IFeatureLayer;5. /QI到FeatureSelection6. IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;7. 8. /创建过滤器9. IQueryFilter pQueryFilter = new QueryFilterClass();10. 11. /设置过滤器对象的查询条件12. pQueryFilter.WhereClause = 人口 5000000;13. /根据查询条件选择要素14. pFeatureSelection.SelectFeat

14、ures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);15. 16. /QI到ISelectionSet17. ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;18. 19. if (pSelectionSet.Count 0)20. 21. 22. IFeatureLayerDefinition pFDefinition = pFeatureLayer as IFeatureLayerDefinition;23. 24. /创

15、建新图层25. 26. IFeatureLayer pNewFeatureLayer = pFDefinition.CreateSelectionLayer(newlayerName, true, null, null);27. pNewFeatureLayer.Name = 查询结果城市;28. axMapControl1.AddLayer(pNewFeatureLayer as ILayer);29. 30. 31. code32. 33. 5.7空间查询实例34. 5.7.1目标35. 实现多边形查询功能36. 5.7.2功能开发37. 代码片段如下:38. 39. 引用的命名空间:40

16、. 41. code 42. using System;43. using System.Drawing;44. using System.Collections;45. using System.ComponentModel;46. using System.Windows.Forms;47. using System.Data;48. using System.IO;49. using System.Runtime.InteropServices;50. using System.Collections.Generic;51. using ESRI.ArcGIS.esriSystem;52

17、. using ESRI.ArcGIS.Carto;53. using ESRI.ArcGIS.Controls;54. using ESRI.ArcGIS.ADF;55. using ESRI.ArcGIS.SystemUI;56. using ESRI.ArcGIS.Display;57. using ESRI.ArcGIS.Geodatabase;58. using ESRI.ArcGIS.Geometry;59. using ESRI.ArcGIS.DataSourcesGDB;60. 61. 62. /63. 在程序运行时的内存中创建矢量要素层,并加到地图控件最顶端64. / /65

18、. 地图控件66. /IFeatureLayer 新加的要素层67. privateIFeatureLayer AddFeatureLayerByMemoryWS(AxMapControl pMapCtrl,ISpatialReference pSReference)68. 69. try70. 71. if (pMapCtrl = null) return null;72. #region73. 创建新的内存工作空间74. IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();75. IWorkspaceName pWSNa

19、me = pWSF.Create(, Temp, null, 0);76. 77. IName pName = (IName)pWSName;78. IWorkspace pMemoryWS = (IWorkspace)pName.Open();79. #endregion80. 81. IField oField = new FieldClass();82. IFields oFields = new FieldsClass();83. IFieldsEdit oFieldsEdit = null;84. IFieldEdit oFieldEdit = null;85. IFeatureCl

20、ass oFeatureClass = null;86. IFeatureLayer oFeatureLayer = null;87. try88. 89. FieldsEdit = oFields as IFieldsEdit;90. oFieldEdit = oField as IFieldEdit;91. oFieldEdit.Name_2 = OBJECTID;92. oFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;93. oFieldEdit.IsNullable_2 = false;94. oFieldEdit.Required

21、_2 = false;95. oFieldsEdit.AddField(oField);96. 97. oField = new FieldClass();98. oFieldEdit = oField as IFieldEdit;99. IGeometryDef pGeoDef = new GeometryDefClass();100. IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;101. pGeoDefEdit.AvgNumPoints_2 = 5;102. pGeoDefEdit.GeometryType_2 = es

22、riGeometryType.esriGeometryPolygon;103. pGeoDefEdit.GridCount_2 = 1;104. pGeoDefEdit.HasM_2 = false;105. pGeoDefEdit.HasZ_2 = false;106. pGeoDefEdit.SpatialReference_2 = pSReference;107. oFieldEdit.Name_2 = SHAPE;108. oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;109. oFieldEdit.GeometryDe

23、f_2 = pGeoDef;110. oFieldEdit.IsNullable_2 = true;111. oFieldEdit.Required_2 = true;112. oFieldsEdit.AddField(oField);113. 114. oField = new FieldClass();115. oFieldEdit = oField as IFieldEdit;116. oFieldEdit.Name_2 = Code;117. oFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;118. oFieldE

24、dit.IsNullable_2 = true;119. oFieldsEdit.AddField(oField);120. 121. /创建要素类122. oFeatureClass = (pMemoryWS as IFeatureWorkspace).CreateFeatureClass(Temp, oFields, null, null, esriFeatureType.esriFTSimple, SHAPE, );123. oFeatureLayer = new FeatureLayerClass();124. oFeatureLayer.Name = TransTemp;125. o

25、FeatureLayer.FeatureClass = oFeatureClass;126. /创建唯一值符号化对象127. IUniqueValueRenderer pURender = new UniqueValueRendererClass();128. pURender.FieldCount = 1;129. pURender.set_Field(0, Code);130. pURender.UseDefaultSymbol = false;131. ISimpleFillSymbol pFillSym = new SimpleFillSymbolClass();132. pFillS

26、ym.Style = esriSimpleFillStyle.esriSFSSolid;133. /半透明颜色134. IRgbColor pColor = new RgbColorClass();135. pColor.Red = 255;136. pColor.Green = 255;137. pFillSym.Color = pColor;138. pURender.AddValue(1, , pFillSym as ISymbol);139. pFillSym = new SimpleFillSymbolClass();140. pFillSym.Style = esriSimpleF

27、illStyle.esriSFSSolid;141. /唯一值符号化内存图层142. (oFeatureLayer as IGeoFeatureLayer).Renderer = pURender as IFeatureRenderer;143. ILayerEffects pLyrEffect = oFeatureLayer as ILayerEffects;144. /透明度145. pLyrEffect.Transparency = 80;146. 147. catch(Exception Err)148. 149. MessageBox.Show(Err.Message);150. 1

28、51. 152. 153. finally154. 155. try156. ystem.Runtime.InteropServices.Marshal.ReleaseComObject(oField);157. System.Runtime.InteropServices.Marshal.ReleaseComObject(oFields);158. System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldsEdit);159. System.Runtime.InteropServices.Marshal.ReleaseCom

29、Object(oFieldEdit);160. System.Runtime.InteropServices.Marshal.ReleaseComObject(pName);161. System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);162. System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSName);163. System.Runtime.InteropServices.Marshal.ReleaseComObject(pMemoryWS);164. System.Runtime.InteropServices.Marshal.ReleaseComObject(oFeatureClass);165. 166. catch167. 168. 169. 170. 171. 172. GC.Collect();173. 174. return oFeatureLayer;175. 176. catch (Exception Err)177. 178. MessageBox.Show(Err.Message, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information);

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

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