矩形和多边形查询_第1页
矩形和多边形查询_第2页
矩形和多边形查询_第3页
矩形和多边形查询_第4页
矩形和多边形查询_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

关于矩形和多边形查询第一页,共五十页,2022年,8月28日主要内容自定义矩形查询自定义多边形查询弥补自定义点查询编程实现第二页,共五十页,2022年,8月28日自定义矩形用户自行指定的矩形区域第三页,共五十页,2022年,8月28日和自定义点有何不同?点所在的区域和矩形有所重叠的区域第四页,共五十页,2022年,8月28日是哪一个矩形?第五页,共五十页,2022年,8月28日是哪一个矩形?从屏幕上的矩形到地图层面的矩形思路:(1)得到屏幕上的矩形;(2)得到对角线上的顶点;(3)把屏幕上的顶点转换成地图上的顶点;(4)由地图上顶点构成地图上的矩形。第六页,共五十页,2022年,8月28日得到屏幕上的矩形(x,y)heightWidth第七页,共五十页,2022年,8月28日把屏幕上的矩形转换成地图上的矩形Point点对象,由(x,y)确定位置矩形对象的创建——包络对象的创建Envelopeenv1=newEnvelope();Envelopeenv1=newEnvelope(左上角,右下角);第八页,共五十页,2022年,8月28日空间查询和矩形有所重叠的区域第九页,共五十页,2022年,8月28日空间查询使用查询功能对象,以及空间过滤对象查询功能对象IQueryFuncitionalityfunc=资源对象.CreateFunctionality();第十页,共五十页,2022年,8月28日如何查询——使用空间过滤对象空间过滤对象SpatialFilter对象,在命名空间中SpatialFilter对象名=newSpatialFilter();设置其属性对象名.Geometry=地图上指定的图形对象名.MaxRecords=结果集中能容纳的数量第十一页,共五十页,2022年,8月28日主要编程步骤地图控件地图资源对象功能对象(查询)查询功能经过空间过滤对象空间要素集转换成htm标记并在地图上高亮度显示。第十二页,共五十页,2022年,8月28日编程结构一个对事件的响应类IdentifyRectangle一个辅助类IdentifyHelper,用于作为类库第十三页,共五十页,2022年,8月28日具体实现得到地图服务项目的功能得到查询功能第十四页,共五十页,2022年,8月28日具体实现创建空间过滤对象,并设置其第十五页,共五十页,2022年,8月28日具体实现得到图层对象在各个图层中进行空间查询,结果放在一个dataTable对象中第十六页,共五十页,2022年,8月28日具体实现把表转换成html标记,并在地图上显示出第十七页,共五十页,2022年,8月28日主要步骤1.增加ToolBar上面的按钮,设置其属性2.增加必要的类IdenfifyRectangle,实现IMapServerToolAction.ServerAction方法。用于把矩形对角的两个点坐标从屏幕转换到地图坐标。再利用Envelope类的构造函数构造一个地图坐标的矩形对象。3.在IdentifyHelper中增加相应的方法Identify,用来实现矩形的查询。3.1获取控件对象3.2得到目标对象的空间矩形第十八页,共五十页,2022年,8月28日主要步骤4.在IdentifyHelper中增加相应的方法4.1判别资源是否可用,是否具有查询功能4.2若资源具有查询功能,则得到其查询功能。4.3依据原有的矩形,构造一个空间查询矩形对象。4.4取出可查询图层,到一个查询结果图层数组。4.5从可查询图层中,查询每个图层中的对象。4.6送到网页上显示。第十九页,共五十页,2022年,8月28日主要步骤5.其他辅助函数5.1编写一个函数,利用GridView将数据表中内容显示到表格中,其中借助HtmlTextWriter类,将表格的内容转换成html格式的字符串。5.2编写另一个函数,将数据表转换成html表格格式的字符串,并把该字符串赋值给地图网页上的一个隐藏的文本框控件,调用open方法,弹出“属性查询页面”。5.3通过地图控件的CallBackResults属性中设定事件响应机制,设定响应的事件,以及事件响应函数。6.编写一个弹出信息属性窗口的网页第二十页,共五十页,2022年,8月28日课堂实践自定义矩形查询:P93-P96补:自定义点查询编程实现第二十一页,共五十页,2022年,8月28日课堂实践自定义矩形查询:P93-P96第二十二页,共五十页,2022年,8月28日自定义多边型查询第二十三页,共五十页,2022年,8月28日实现步骤1.给自定义Tool增加一个地图关联事件,设定关联的响应。2.响应之处实现一个IMapServerToolAction接口的ServerAction函数:(1)得到地图控件(2)得到地图控件上被指定的图形。(3)得到图形所对应或覆盖到的对象。(4)把屏幕对象映射到地图对象。(5)得到地图对象位置所对应的图层的各个对象。(6)把结果送给网页窗口显示。(7)接收并把结果转换成html格式的字符串,通过地图控件的回传处理函数,把字符串显示在弹出的网页上。

第二十四页,共五十页,2022年,8月28日自定义自定义多边形的获取从屏幕上的多边形得到地图上的多边形……以多边形为过滤条件进行空间查询……第二十五页,共五十页,2022年,8月28日自定义多边形的获取第二十六页,共五十页,2022年,8月28日从屏幕上的多边形得到地图上的多边形从屏幕上的多边形得到各个拐点(点的集合)把屏幕上各点转换成地图上的对应点把地图上的各点形成地图上的多边形第二十七页,共五十页,2022年,8月28日多边形转换从屏幕上的多边形得到各个拐点(点的集合),把屏幕上各点转换成地图上的对应点第二十八页,共五十页,2022年,8月28日多边形转换把地图上的各点形成地图上的多边形知识:从地图上的点集合,形成到地图上的环,到地图上的多边形Ring是ESRI.ArcGIS.ADF.Web.Geometry.RingRingCollection是第二十九页,共五十页,2022年,8月28日后续任务空间查询,得到查询结果集查询结果集转换、显示第三十页,共五十页,2022年,8月28日自定义多边形查询属性的实现仍然需要一个响应类,和支持类的辅助。对于自定义多变形查询来说,需要增加一个函数,实现多边形坐标系统的转换。第三十一页,共五十页,2022年,8月28日响应类publicclassIdentifyPolygon:IMapServerToolAction{ voidIMapServerToolAction.ServerAction(ToolEventArgsargs){Mapmap=args.ControlasMap;PolygonEventArgspolyArgs=

(PolygonEventArgs)args;PolygonmapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);IdentifyHelper.Identify(map,mapPoly);}}第三十二页,共五十页,2022年,8月28日自定义多边形查询属性的实现仍然需要一个响应类,和支持类(共2个IdentifyHelpe、GeometryHelper)的辅助。对于自定义多变形查询来说,需要增加一个函数,实现多边形坐标系统的转换。第三十三页,共五十页,2022年,8月28日响应类publicclassIdentifyPolygon:IMapServerToolAction{ voidIMapServerToolAction.ServerAction(ToolEventArgsargs){Mapmap=args.ControlasMap;PolygonEventArgspolyArgs=

(PolygonEventArgs)args;PolygonmapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);IdentifyHelper.Identify(map,mapPoly);}}第三十四页,共五十页,2022年,8月28日支持类的成员publicstaticvoidIdentify(Mapmap,ESRI.ArcGIS.ADF.Web.Geometry.GeometrymapGeometry)publicstaticvoidShowIdentifyResult(Mapmap,DataTableCollectiondtc)publicstaticstringGetHtmlFromDataTable(DataTabledt)publicstaticvoidAddJavaScriptCallback(Mapmap,stringexecuteString)第三十五页,共五十页,2022年,8月28日Identify()方法的作用及组成步骤IdentifyHelper.Identify(mapCtrl,mapGeometry),接受传递而来的参量数值。判别资源是否可用,是否具有查询功能,若资源具有查询功能,则得到其查询功能。依据原有的形状对象,构造一个空间查询对象。利用该查询对象从可查询图层中过滤出查询结果图层数组。从可查询图层数组中查询每个图层中的对象(遍历),送到一个dataSet中。再把dataSet的Table送到DataTableCollection对象中。形成Html字符串,送给浏览器显示。第三十六页,共五十页,2022年,8月28日对比在响应类中的处理部分Mapmap=args.ControlasMap;

点查询:

PointEventArgspea=(PointEventArgs)args;System.Drawing.Pointscreen_point=pea.ScreenPoint;Pointpoint=Point.ToMapPoint();……矩形查询RectangleEventArgsrectargs=(RectangleEventArgs)args;System.Drawing.Rectanglemyrect=rectargs.ScreenExtent;

顶点坐标转换;形成地图上的矩形;IdentifyHelper.Identify(mapCtrl,mapGeometry);多边形查询

PolygonEventArgspolyArgs=(PolygonEventArgs)args;PolygonmapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);IdentifyHelper.Identify(map,mapPoly);圆查询CircleEventArgscircleArgs=(CircleEventArgs)args;PolygonmapPoly=GeometryHelper.GetMapPolygon(map,circleArgs);IdentifyHelper.Identify(map,mapmapGeometry);

第三十七页,共五十页,2022年,8月28日课堂实践自定义多边形查询:P96-P97补:自定义点查询编程实现自定义矩形查询编程实现第三十八页,共五十页,2022年,8月28日课堂实践自定义矩形查询:P93-P96自定义多边形查询:P96-P97程序录入:建立一个类库GisFunctionality,在其中输入函数P103(2)、P104(2)、P105(5)第三十九页,共五十页,2022年,8月28日自定义圆查询的实现第四十页,共五十页,2022年,8月28日程序实现机制和自定义多边形查询属性一致。程序结构是:响应类、支持类、图形转换类、弹出网页。第四十一页,共五十页,2022年,8月28日响应类IdentifyCircle类publicclassIdentifyCircle:IMapServerToolAction{voidIMapServerToolAction.ServerAction(ToolEventArgsargs){Mapmap=args.ControlasMap;CircleEventArgscircleArgs=(CircleEventArgs)args;PolygonmapPoly=GeometryHelper.GetMapPolygon(map,circleArgs);IdentifyHelper.Identify(map,mapPoly);}}第四十二页,共五十页,2022年,8月28日需要使用类的介绍GraphicsPath类,表示一系列相互连接的直线和曲线。GraphicsPath.Flatten(),将此路径中的各段曲线转换成相连的线段序列。Matrix类,是一个矩阵类,Matrix.Translate()方法用于实现一个矩阵转换。第四十三页,共五十页,2022年,8月28日publicstaticESRI.ArcGIS.ADF.Web.Geometry.PolygonGetMapPolygon(Mapmap,CircleEventArgscircleArgs){System.Drawing.PointscreenPointCenter=newSystem.Drawing.Point((int)circleArgs.CenterPoint.X,(int)circleArgs.CenterPoint.Y);System.Drawing.PointscreenPointBrink=newSystem.Drawing.Point((int)circleArgs.CenterPoint.X,(int)circleArgs.CenterPoint.Y+(int)circleArgs.Radius);

……}第四十四页,共五十页,2022年,8月28日从屏幕坐标转换到地图坐标PointmapPointCenter=Point.ToMapPoint(screenPointCenter,map.Extent,(int)map.Width.Value,(int)map.Height.Value);PointmapPointBrink=Point.ToMapPoint(screenPointBrink,map.Extent,(int)map.Width.Value,(int)map.Height.Value);得到地图坐标中的半径doubleradius=Math.Sqrt((mapPointCenter.X-mapPointBrink.X)*(mapPointCenter.X-mapPointBrink.X)+(mapPointCenter.Y-mapPointBrink.Y)*(mapPointCenter.Y-mapPointBrink.Y));第四十五页,共五十页,2022年,8月28日思路:以圆心为中心画一个椭圆,椭圆边上分为若干段,再将地图上的点集合,集中到地图上的线,再到地图上的多边形。第四十六页,共五十页,2022年,8月28日GraphicsPathgpath=newGraphicsPath();gpath.AddEllipse((float)(mapPointCenter.X-radius),(float)(mapP

温馨提示

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

评论

0/150

提交评论