资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,矩形和多边形查询,主要内容,自定义矩形查询,自定义多边形查询,弥补自定义点查询编程实现,自定义矩形,用户自行指定的矩形区域,和自定义点有何不同?,点所在的区域,和矩形有所重叠的区域,是哪一个矩形?,是哪一个矩形?,从屏幕上的矩形到地图层面的矩形,思路:,(,1,)得到屏幕上的矩形;,(,2,)得到对角线上的顶点;,(,3,)把屏幕上的顶点转换成地图上的顶点;,(,4,)由地图上顶点构成地图上的矩形。,得到屏幕上的矩形,(x,y),height,Width,把屏幕上的矩形转换成地图上的矩形,Point,点对象,由,(x,y),确定位置,矩形对象的创建,包络对象的创建,Envelope env1=new Envelope();,Envelope env1=new Envelope(,左上角,右下角,);,空间查询,和矩形有所重叠的区域,空间查询,使用查询功能对象,以及空间过滤对象,查询功能对象,IQueryFuncitionality func=,资源对象,.CreateFunctionality();,如何查询,使用空间过滤对象,空间过滤对象,SpatialFilter,对象,在,ESRI.ArcGIS.ADF.Web,命名空间中,SpatialFilter,对象名,=new SpatialFilter();,设置其属性,对象名,.Geometry=,地图上指定的图形,对象名,.MaxRecords=,结果集中能容纳的数量,主要编程步骤,地图控件,地图资源对象功能对象(查询)查询功能经过空间过滤对象空间要素集转换成,htm,标记并在地图上高亮度显示。,编程结构,一个对事件的响应类,IdentifyRectangle,一个辅助类,IdentifyHelper,,用于作为类库,具体实现,得到地图服务项目的功能,得到查询功能,具体实现,创建空间过滤对象,并设置其,具体实现,得到图层对象,在各个图层中进行空间查询,结果放在一个,dataTable,对象中,具体实现,把表转换成,html,标记,并在地图上显示出,主要步骤,1,增加,ToolBar,上面的按钮,设置其属性,2,增加必要的类,IdenfifyRectangle,,实现,IMapServerToolAction.ServerAction,方法。,用于把矩形对角的两个点坐标从屏幕转换到地图坐标。再利用,Envelope,类的构造函数构造一个地图坐标的矩形对象。,3,在,IdentifyHelper,中增加相应的方法,Identify,,用来实现矩形的查询。,3,1,获取控件对象,3,2,得到目标对象的空间矩形,主要步骤,4,在,IdentifyHelper,中增加相应的方法,4,1,判别资源是否可用,是否具有查询功能,4,2,若资源具有查询功能,则得到其查询功能。,4,3,依据原有的矩形,构造一个空间查询矩形对象。,4,4,取出可查询图层,到一个查询结果图层数组。,4,5,从可查询图层中,查询每个图层中的对象。,4,6,送到网页上显示。,主要步骤,5,其他辅助函数,5,1,编写一个函数,利用,GridView,将数据表中内容显示到表格中,其中借助,HtmlTextWriter,类,将表格的内容转换成,html,格式的字符串。,5,2,编写另一个函数,将数据表转换成,html,表格格式的字符串,并把该字符串赋值给地图网页上的一个隐藏的文本框控件,调用,open,方法,弹出,“,属性查询页面,”,。,5,3,通过地图控件的,CallBackResults,属性中设定事件响应机制,设定响应的事件,以及事件响应函数。,6,编写一个弹出信息属性窗口的网页,课堂实践,自定义矩形查询:,P93-P96,补:自定义点查询编程实现,课堂实践,自定义矩形查询:,P93-P96,自定义多边型查询,实现步骤,1.,给自定义,Tool,增加一个地图关联事件,设定关联的响应。,2.,响应之处实现一个,IMapServerToolAction,接口的,ServerAction,函数:,(,1,)得到地图控件,(,2,)得到地图控件上被指定的图形。,(,3,)得到图形所对应或覆盖到的对象。,(,4,)把屏幕对象映射到地图对象。,(,5,)得到地图对象位置所对应的图层的各个对象。,(,6,)把结果送给网页窗口显示。,(,7,)接收并把结果转换成,html,格式的字符串,通过地图控件的回传处理函数,把字符串显示在弹出的网页上。,自定义,自定义多边形的获取,从屏幕上的多边形得到地图上的多边形,以多边形为过滤条件进行空间查询,自定义多边形的获取,从屏幕上的多边形得到地图上的多边形,从屏幕上的多边形得到各个拐点(点的集合),把屏幕上各点转换成地图上的对应点,把地图上的各点形成地图上的多边形,多边形转换,从屏幕上的多边形得到各个拐点(点的集合),把屏幕上各点转换成地图上的对应点,多边形转换,把地图上的各点形成地图上的多边形,知识:从地图上的点集合,形成到地图上的环,到地图上的多边形,Ring,是,ESRI.ArcGIS.ADF.Web.Geometry.Ring,RingCollection,是,ESRI.ArcGIS.ADF.Web.Geometry.RingCollection,后续任务,空间查询,得到查询结果集,查询结果集转换、显示,自定义多边形查询属性的实现,仍然需要一个响应类,和支持类的辅助。,对于自定义多变形查询来说,需要增加一个函数,实现多边形坐标系统的转换。,响应类,public class IdentifyPolygon:IMapServerToolAction,void IMapServerToolAction.ServerAction(ToolEventArgs args),Map map=args.Control as Map;,PolygonEventArgs polyArgs=,(PolygonEventArgs)args;,Polygon mapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);,IdentifyHelper.Identify(map,mapPoly);,自定义多边形查询属性的实现,仍然需要一个响应类,和支持类(共,2,个,IdentifyHelpe,、,GeometryHelper,)的辅助。,对于自定义多变形查询来说,需要增加一个函数,实现多边形坐标系统的转换。,响应类,public class IdentifyPolygon:IMapServerToolAction,void IMapServerToolAction.ServerAction(ToolEventArgs args),Map map=args.Control as Map;,PolygonEventArgs polyArgs=,(PolygonEventArgs)args;,Polygon mapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);,IdentifyHelper.Identify(map,mapPoly);,支持类的成员,public static void Identify(Map map,ESRI.ArcGIS.ADF.Web.Geometry.Geometry mapGeometry),public static void ShowIdentifyResult(Map map,DataTableCollection dtc),public static string GetHtmlFromDataTable(DataTable dt),public static void AddJavaScriptCallback(Map map,string executeString),Identify(),方法的作用及组成步骤,IdentifyHelper.Identify(mapCtrl,mapGeometry),,接受传递而来的参量数值。,判别资源是否可用,是否具有查询功能,若资源具有查询功能,则得到其查询功能。,依据原有的形状对象,构造一个空间查询对象。利用该查询对象从可查询图层中过滤出查询结果图层数组。,从可查询图层数组中查询每个图层中的对象(遍历),送到一个,dataSet,中。,再把,dataSet,的,Table,送到,DataTableCollection,对象中。,形成,Html,字符串,送给浏览器显示。,对比在响应类中的处理部分,Map map=args.Control as Map;,点查询:,PointEventArgs pea=(PointEventArgs)args;,System.Drawing.Point screen_point=pea.ScreenPoint;,Point point=Point.ToMapPoint();,矩形查询,RectangleEventArgs rectargs=(RectangleEventArgs)args;,System.Drawing.Rectangle myrect=rectargs.ScreenExtent;,顶点坐标转换;形成地图上的矩形,;,IdentifyHelper.Identify(mapCtrl,map,Geometry,);,多边形查询,PolygonEventArgs polyArgs=(PolygonEventArgs)args;,Polygon mapPoly=GeometryHelper.GetMapPolygon(map,polyArgs);,IdentifyHelper.Identify(map,mapPoly);,圆查询,CircleEventArgs circleArgs=(CircleEventArgs)args;,Polygon mapPoly=GeometryHelper.GetMapPolygon(map,circleArgs);,IdentifyHelper.Identify(map,map,map,Geometry);,课堂实践,自定义多边形查询:,P96-P97,补:自定义点查询编程实现,自定义矩形查询,编程实现,课堂实践,自定义矩形查询:,P93-P96,自定义多边形查询:,P96-P97,程序录入:,建立一个类库,GisFunctionality,,在其中输入函数,P103(2),、,P104(2),、,P105(5),自定义圆查询的实现,程序实现机制和自定义多边形查询属性一致。,程序结构是:响应类、支持类、图形转换类、弹出网页。,响应类,IdentifyCircle,类,public class IdentifyCircle:IMapServerToolAction,void IMapServerToolAction.ServerAction(ToolEventArgs args),Map map=args.Control as Map;,CircleEventArgs circleArgs=(CircleEventArgs)args;,Polygon mapPoly=GeometryHelper.GetMapPolygon(map,circleArgs);,IdentifyHelper.Identify(map,mapPoly);,需要使用类的介绍,GraphicsPath,类,表示一系列相互连接的直线和曲线。,GraphicsPath.Flatten,(),将此路径中的各段曲线转换成相连的线段序列。,Matrix,类,是一个矩阵类,,Matrix.Translate(),方法用于实现一个矩阵转换。,public static ESRI.ArcGIS.ADF.Web.Geometry.Polygon GetMapPolygon(,Map map,CircleEventArgs c
展开阅读全文