矩形和多边形查询课件

上传人:夏** 文档编号:591421104 上传时间:2024-09-17 格式:PPT 页数:49 大小:168KB
返回 下载 相关 举报
矩形和多边形查询课件_第1页
第1页 / 共49页
矩形和多边形查询课件_第2页
第2页 / 共49页
矩形和多边形查询课件_第3页
第3页 / 共49页
矩形和多边形查询课件_第4页
第4页 / 共49页
矩形和多边形查询课件_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《矩形和多边形查询课件》由会员分享,可在线阅读,更多相关《矩形和多边形查询课件(49页珍藏版)》请在金锄头文库上搜索。

1、矩形和多边形查询矩形和多边形查询2013年10月矩形和多边形查询主要内容主要内容o自定义矩形查询自定义矩形查询o自定义多边形查询自定义多边形查询o弥补自定义点查询编程实现弥补自定义点查询编程实现矩形和多边形查询自定义矩形自定义矩形o用户自行指定的矩形区域用户自行指定的矩形区域矩形和多边形查询和自定义点有何不同?和自定义点有何不同?o点所在的区域点所在的区域o和矩形有所重叠的区域和矩形有所重叠的区域矩形和多边形查询是哪一个矩形?是哪一个矩形?矩形和多边形查询是哪一个矩形?是哪一个矩形?o从屏幕上的矩形到地图层面的矩形从屏幕上的矩形到地图层面的矩形o思路:思路:(1 1)得到屏幕上的矩形;)得到屏

2、幕上的矩形;(2 2)得到对角线上的顶点;)得到对角线上的顶点;(3 3)把屏幕上的顶点转换成地图上的顶点;)把屏幕上的顶点转换成地图上的顶点;(4 4)由地图上顶点构成地图上的矩形。)由地图上顶点构成地图上的矩形。矩形和多边形查询得到屏幕上的矩形得到屏幕上的矩形(x, y)heightWidth矩形和多边形查询把屏幕上的矩形转换成地图上的矩形把屏幕上的矩形转换成地图上的矩形oPoint 点对象,由点对象,由(x, y)确定位置确定位置o矩形对象的创建矩形对象的创建包络对象的创建包络对象的创建nEnvelope env1=new Envelope();nEnvelope env1=new En

3、velope(左上角,右下角);矩形和多边形查询空间查询空间查询o和矩形有所重叠的区域和矩形有所重叠的区域矩形和多边形查询空间查询空间查询o使用查询功能对象,以及空间过滤对象使用查询功能对象,以及空间过滤对象o查询功能对象查询功能对象IQueryFuncitionality func=资源对象.CreateFunctionality();矩形和多边形查询如何查询如何查询使用空间过滤对象使用空间过滤对象o空间过滤对象空间过滤对象SpatialFilterSpatialFilter对象,在对象,在ESRI.ArcGIS.ADF.WebESRI.ArcGIS.ADF.Web命名空间中命名空间中Spa

4、tialFilter SpatialFilter 对象名对象名=new SpatialFilter();=new SpatialFilter();o设置其属性设置其属性对象名对象名.Geometry=.Geometry=地图上指定的图形地图上指定的图形对象名对象名.MaxRecords=.MaxRecords=结果集中能容纳的数量结果集中能容纳的数量矩形和多边形查询主要编程步骤主要编程步骤o地图控件地图控件地图资源对象地图资源对象功能对象(查询)功能对象(查询)查询功能经过空间过滤对象查询功能经过空间过滤对象空间要素集空间要素集转换成转换成htm标记并在地图上高亮度显示。标记并在地图上高亮度显

5、示。矩形和多边形查询编程结构o一个对事件的响应类IdentifyRectangleo一个辅助类IdentifyHelper,用于作为类库矩形和多边形查询具体实现具体实现o得到地图服务项目的功能o得到查询功能矩形和多边形查询具体实现具体实现o创建空间过滤对象,并设置其创建空间过滤对象,并设置其矩形和多边形查询具体实现具体实现o得到图层对象o在各个图层中进行空间查询,结果放在一个dataTable对象中矩形和多边形查询具体实现具体实现o把表转换成html标记,并在地图上显示出矩形和多边形查询主要步骤主要步骤1 1增加增加ToolBarToolBar上面的按钮,设置其属性上面的按钮,设置其属性2 2

6、增加必要的类增加必要的类IdenfifyRectangleIdenfifyRectangle,实现,实现IMapServerToolAction.ServerActionIMapServerToolAction.ServerAction方法。方法。 用于把矩形对角的两个点坐标从屏幕转换到地图坐用于把矩形对角的两个点坐标从屏幕转换到地图坐标。再利用标。再利用EnvelopeEnvelope类的构造函数构造一个地图坐类的构造函数构造一个地图坐标的矩形对象。标的矩形对象。3 3在在IdentifyHelperIdentifyHelper中增加相应的方法中增加相应的方法IdentifyIdentify

7、,用,用来实现矩形的查询。来实现矩形的查询。3 31 1 获取控件对象获取控件对象3 32 2 得到目标对象的空间矩形得到目标对象的空间矩形矩形和多边形查询主要步骤主要步骤4 4在在IdentifyHelperIdentifyHelper中增加相应的方法中增加相应的方法4 41 1 判别资源是否可用,是否具有查询功能判别资源是否可用,是否具有查询功能4 42 2 若资源具有查询功能,则得到其查询功能。若资源具有查询功能,则得到其查询功能。4 43 3 依据原有的矩形,构造一个空间查询矩形对象。依据原有的矩形,构造一个空间查询矩形对象。4 44 4 取出可查询图层,到一个查询结果图层数组。取出可

8、查询图层,到一个查询结果图层数组。4 45 5 从可查询图层中,查询每个图层中的对象。从可查询图层中,查询每个图层中的对象。4 46 6 送到网页上显示。送到网页上显示。矩形和多边形查询主要步骤主要步骤5 5其他辅助函数其他辅助函数5 51 1 编写一个函数,利用编写一个函数,利用GridViewGridView将数据表中内容显示将数据表中内容显示到表格中,其中借助到表格中,其中借助HtmlTextWriterHtmlTextWriter类,将表格的内类,将表格的内容转换成容转换成htmlhtml格式的字符串。格式的字符串。5 52 2 编写另一个函数,将数据表转换成编写另一个函数,将数据表转

9、换成htmlhtml表格格式的表格格式的字符串,并把该字符串赋值给地图网页上的一个隐藏字符串,并把该字符串赋值给地图网页上的一个隐藏的文本框控件,调用的文本框控件,调用openopen方法,弹出方法,弹出“属性查询页面属性查询页面”。5 53 3 通过地图控件的通过地图控件的CallBackResultsCallBackResults属性中设定事件属性中设定事件响应机制,设定响应的事件,以及事件响应函数。响应机制,设定响应的事件,以及事件响应函数。6 6编写一个弹出信息属性窗口的网页编写一个弹出信息属性窗口的网页矩形和多边形查询课堂实践课堂实践o自定义矩形查询:自定义矩形查询:P93-P96P

10、93-P96o补:自定义点查询编程实现补:自定义点查询编程实现矩形和多边形查询课堂实践课堂实践o自定义矩形查询:自定义矩形查询:P93-P96P93-P96矩形和多边形查询自定义多边型查询自定义多边型查询矩形和多边形查询实现步骤实现步骤1. 1. 给自定义给自定义ToolTool增加一个地图关联事件,设定关联的响应。增加一个地图关联事件,设定关联的响应。2. 2. 响应之处实现一个响应之处实现一个IMapServerToolActionIMapServerToolAction接口的接口的ServerActionServerAction函数:函数:(1 1)得到地图控件)得到地图控件(2 2)得

11、到地图控件上被指定的图形。)得到地图控件上被指定的图形。(3 3)得到图形所对应或覆盖到的对象。)得到图形所对应或覆盖到的对象。(4 4)把屏幕对象映射到地图对象。)把屏幕对象映射到地图对象。(5 5)得到地图对象位置所对应的图层的各个对象。)得到地图对象位置所对应的图层的各个对象。(6 6)把结果送给网页窗口显示。)把结果送给网页窗口显示。(7 7)接收并把结果转换成)接收并把结果转换成htmlhtml格式的字符串,通过地图控件的回格式的字符串,通过地图控件的回传处理函数,把字符串显示在弹出的网页上。传处理函数,把字符串显示在弹出的网页上。 矩形和多边形查询自定义自定义o自定义多边形的获取自

12、定义多边形的获取o从屏幕上的多边形得到地图上的多边形从屏幕上的多边形得到地图上的多边形oo以多边形为过滤条件进行空间查询以多边形为过滤条件进行空间查询o矩形和多边形查询自定义多边形的获取自定义多边形的获取矩形和多边形查询从屏幕上的多边形得到地图上的多边形从屏幕上的多边形得到地图上的多边形o从屏幕上的多边形得到各个拐点(点的集合)从屏幕上的多边形得到各个拐点(点的集合)o把屏幕上各点转换成地图上的对应点把屏幕上各点转换成地图上的对应点o把地图上的各点形成地图上的多边形把地图上的各点形成地图上的多边形矩形和多边形查询多边形转换多边形转换o从屏幕上的多边形得到各个拐点(点的集合)从屏幕上的多边形得到

13、各个拐点(点的集合),把屏幕上各点转换成地图上的对应点,把屏幕上各点转换成地图上的对应点矩形和多边形查询多边形转换多边形转换o把地图上的各点形成地图上的多边形把地图上的各点形成地图上的多边形o知识:从地图上的点集合,形成到地图上的环,到知识:从地图上的点集合,形成到地图上的环,到地图上的多边形地图上的多边形RingRing是是ESRI. ArcGIS. ADF. Web. Geometry. RingESRI. ArcGIS. ADF. Web. Geometry. RingRingCollectionRingCollection是是ESRI.ArcGIS.ADF.Web.Geometry.R

14、ingCollectionESRI.ArcGIS.ADF.Web.Geometry.RingCollection矩形和多边形查询后续任务后续任务o空间查询,得到查询结果集空间查询,得到查询结果集o查询结果集转换、显示查询结果集转换、显示矩形和多边形查询自定义多边形查询属性的实现自定义多边形查询属性的实现o仍然需要一个响应类,和支持类的辅助。仍然需要一个响应类,和支持类的辅助。o对于自定义多变形查询来说对于自定义多变形查询来说 ,需要增加一,需要增加一个函数,实现多边形坐标系统的转换。个函数,实现多边形坐标系统的转换。 矩形和多边形查询响应类响应类public class IdentifyPol

15、ygon : IMapServerToolActionpublic class IdentifyPolygon : IMapServerToolAction void IMapServerToolAction.ServerAction(ToolEventArgs void IMapServerToolAction.ServerAction(ToolEventArgs args)args) Map map = args.Control as Map; Map map = args.Control as Map; PolygonEventArgs polyArgs = PolygonEventAr

16、gs polyArgs = (PolygonEventArgs)args;(PolygonEventArgs)args; Polygon mapPoly = Polygon mapPoly = GeometryHelper.GetMapPolygon(map, polyArgs);GeometryHelper.GetMapPolygon(map, polyArgs); IdentifyHelper.Identify(map, mapPoly); IdentifyHelper.Identify(map, mapPoly); 矩形和多边形查询自定义多边形查询属性的实现自定义多边形查询属性的实现o仍

17、然需要一个响应类,和支持类(共仍然需要一个响应类,和支持类(共2 2个个IdentifyHelpeIdentifyHelpe、GeometryHelperGeometryHelper)的辅助。)的辅助。o对于自定义多变形查询来说对于自定义多变形查询来说 ,需要增加一,需要增加一个函数,实现多边形坐标系统的转换。个函数,实现多边形坐标系统的转换。 矩形和多边形查询响应类响应类public class IdentifyPolygon : IMapServerToolActionpublic class IdentifyPolygon : IMapServerToolAction void IMap

18、ServerToolAction.ServerAction(ToolEventArgs void IMapServerToolAction.ServerAction(ToolEventArgs args)args) Map map = args.Control as Map; Map map = args.Control as Map; PolygonEventArgs polyArgs = PolygonEventArgs polyArgs = (PolygonEventArgs)args;(PolygonEventArgs)args; Polygon mapPoly = Polygon m

19、apPoly = GeometryHelper.GetMapPolygon(map, polyArgs);GeometryHelper.GetMapPolygon(map, polyArgs); IdentifyHelper.Identify(map, mapPoly); IdentifyHelper.Identify(map, mapPoly); 矩形和多边形查询支持类的成员支持类的成员opublic static void Identify(Map map, ESRI.ArcGIS.ADF.Web.Geometry.Geometry mapGeometry) opublic static

20、void ShowIdentifyResult(Map map, DataTableCollection dtc)opublic static string GetHtmlFromDataTable(DataTable dt)opublic static void AddJavaScriptCallback(Map map, string executeString)矩形和多边形查询Identify()方法的作用及组成步骤oIdentifyHelper.Identify(mapCtrl, IdentifyHelper.Identify(mapCtrl, mapGeometry) mapGeom

21、etry) ,接受传递而来的参量数值。,接受传递而来的参量数值。o判别资源是否可用,是否具有查询功能,若资源具判别资源是否可用,是否具有查询功能,若资源具有查询功能,则得到其查询功能。有查询功能,则得到其查询功能。 o依据原有的形状对象,构造一个空间查询对象。依据原有的形状对象,构造一个空间查询对象。 利用该查询对象从可查询图层中过滤出查询结果图利用该查询对象从可查询图层中过滤出查询结果图层数组。层数组。o从可查询图层数组中查询每个图层中的对象(遍历)从可查询图层数组中查询每个图层中的对象(遍历),送到一个,送到一个dataSetdataSet中。中。o再把再把dataSetdataSet的的

22、TableTable送到送到DataTableCollectionDataTableCollection对对象中。象中。o形成形成HtmlHtml字符串,送给浏览器显示。字符串,送给浏览器显示。 矩形和多边形查询对比在响应类中的处理部分对比在响应类中的处理部分Map map = args.Control as Map; o点查询:点查询: PointEventArgs pea = (PointEventArgs)args; System.Drawing.Point screen_point = pea.ScreenPoint; Point point = Point.ToMapPoint();

23、 o矩形查询矩形查询RectangleEventArgs rectargs = (RectangleEventArgs)args;System.Drawing.Rectangle myrect = rectargs.ScreenExtent; 顶点坐标转换;形成地图上的矩形顶点坐标转换;形成地图上的矩形;IdentifyHelper.Identify(mapCtrl, mapGeometry);o多边形查询多边形查询 PolygonEventArgs polyArgs = (PolygonEventArgs)args; Polygon mapPoly = GeometryHelper.GetM

24、apPolygon(map, polyArgs); IdentifyHelper.Identify(map, mapPoly);o圆查询圆查询CircleEventArgs circleArgs = (CircleEventArgs)args;CircleEventArgs circleArgs = (CircleEventArgs)args;Polygon mapPoly = GeometryHelper.GetMapPolygon(map, circleArgs); IdentifyHelper.Identify(map, map mapGeometry); 矩形和多边形查询课堂实践课堂实

25、践o自定义多边形查询:自定义多边形查询:P96-P97P96-P97o补:自定义点查询编程实现补:自定义点查询编程实现o 自定义矩形查询自定义矩形查询编程实现编程实现矩形和多边形查询课堂实践课堂实践o自定义矩形查询:自定义矩形查询:P93-P96P93-P96o自定义多边形查询:自定义多边形查询:P96-P97P96-P97o程序录入:程序录入:o建立一个类库建立一个类库GisFunctionalityGisFunctionality,在其中输,在其中输入函数入函数P103(2)P103(2)、P104(2)P104(2)、P105(5)P105(5)矩形和多边形查询自定义圆查询的实现自定义圆

26、查询的实现 矩形和多边形查询o程序实现机制和自定义多边形查询属程序实现机制和自定义多边形查询属性一致。性一致。o程序结构是:响应类、支持类、图形程序结构是:响应类、支持类、图形转换类、弹出网页。转换类、弹出网页。矩形和多边形查询响应类响应类IdentifyCircleIdentifyCircle类类public class IdentifyCircle : IMapServerToolActionpublic class IdentifyCircle : IMapServerToolAction void IMapServerToolAction.ServerAction(ToolEventA

27、rgs args) void IMapServerToolAction.ServerAction(ToolEventArgs args) Map map = args.Control as Map; Map map = args.Control as Map; CircleEventArgs circleArgs = (CircleEventArgs)args; CircleEventArgs circleArgs = (CircleEventArgs)args; Polygon mapPoly = GeometryHelper.GetMapPolygon(map, Polygon mapPo

28、ly = GeometryHelper.GetMapPolygon(map, circleArgs);circleArgs); IdentifyHelper.Identify(map, mapPoly); IdentifyHelper.Identify(map, mapPoly); 矩形和多边形查询需要使用类的介绍需要使用类的介绍oGraphicsPathGraphicsPath类,表示一系列相互连接的直类,表示一系列相互连接的直线和曲线。线和曲线。nGraphicsPath. FlattenGraphicsPath. Flatten(),将此路径中的各(),将此路径中的各段曲线转换成相连的线

29、段序列。段曲线转换成相连的线段序列。oMatrixMatrix类,是一个矩阵类,类,是一个矩阵类,nMatrix .Translate()Matrix .Translate()方法用于实现一个矩阵转方法用于实现一个矩阵转换。换。矩形和多边形查询public static ESRI.ArcGIS.ADF.Web.Geometry.Polygon GetMapPolygon(public static ESRI.ArcGIS.ADF.Web.Geometry.Polygon GetMapPolygon(Map map, CircleEventArgs circleArgs)Map map, Cir

30、cleEventArgs circleArgs) System.Drawing.Point screenPointCenter = new System.Drawing.Point( System.Drawing.Point screenPointCenter = new System.Drawing.Point( (int)circleArgs.CenterPoint.X,(int)circleArgs.CenterPoint.Y); (int)circleArgs.CenterPoint.X,(int)circleArgs.CenterPoint.Y); System.Drawing.Po

31、int screenPointBrink = new System.Drawing.Point( System.Drawing.Point screenPointBrink = new System.Drawing.Point( (int)circleArgs.CenterPoint.X, (int)circleArgs.CenterPoint.X, (int)circleArgs.CenterPoint.Y + (int)circleArgs.Radius);(int)circleArgs.CenterPoint.Y + (int)circleArgs.Radius); 矩形和多边形查询从屏

32、幕坐标转换到地图坐标从屏幕坐标转换到地图坐标 Point mapPointCenter = Point.ToMapPoint(screenPointCenter, map.Extent, (int)map.Width.Value, (int)map.Height.Value);Point mapPointBrink = Point.ToMapPoint(screenPointBrink, map.Extent, (int)map.Width.Value, (int)map.Height.Value);得到地图坐标中的半径得到地图坐标中的半径double radius = Math.Sqrt(

33、(mapPointCenter.X - mapPointBrink.X) * (mapPointCenter.X - mapPointBrink.X) +(mapPointCenter.Y - mapPointBrink.Y)*(mapPointCenter.Y - mapPointBrink.Y);矩形和多边形查询o思路:以圆心为中心画一个椭圆,椭圆边上思路:以圆心为中心画一个椭圆,椭圆边上分为若干段,再将地图上的点集合,集中到分为若干段,再将地图上的点集合,集中到地图上的线,再到地图上的多边形。地图上的线,再到地图上的多边形。矩形和多边形查询 GraphicsPath gpath = ne

34、w GraphicsPath(); GraphicsPath gpath = new GraphicsPath(); gpath.AddEllipse(float)(mapPointCenter.X - radius), gpath.AddEllipse(float)(mapPointCenter.X - radius), (float)(mapPointCenter.Y - radius), (float)(2 * radius), (float)(mapPointCenter.Y - radius), (float)(2 * radius), (float)(2 * radius);(fl

35、oat)(2 * radius); Matrix translateMatrix = new Matrix(); Matrix translateMatrix = new Matrix(); translateMatrix.Translate(0, 0); translateMatrix.Translate(0, 0); float flattening = (float)(radius / 1000); float flattening = (float)(radius / 1000); gpath.Flatten(translateMatrix, flattening); gpath.Fl

36、atten(translateMatrix, flattening);矩形和多边形查询 PointCollection pc = new PointCollection();PointCollection pc = new PointCollection(); foreach (System.Drawing.PointF dpnt in gpath.PathPoints) foreach (System.Drawing.PointF dpnt in gpath.PathPoints) pc.Add(new ESRI.ArcGIS.ADF.Web.Geometry.Point(dpnt.X, p

37、c.Add(new ESRI.ArcGIS.ADF.Web.Geometry.Point(dpnt.X, dpnt.Y);dpnt.Y); Ring ring = new Ring(); Ring ring = new Ring(); ring.Points = pc; ring.Points = pc; RingCollection rings = new RingCollection(); RingCollection rings = new RingCollection(); rings.Add(ring); rings.Add(ring); Polygon mapPoly = new

38、Polygon(); Polygon mapPoly = new Polygon(); mapPoly.Rings = rings; mapPoly.Rings = rings; return mapPoly; return mapPoly;矩形和多边形查询课堂实践课堂实践o自定义矩形查询:自定义矩形查询:P93-P96P93-P96o自定义多边形查询:自定义多边形查询:P96-P97P96-P97o程序录入:程序录入:o建立一个类库建立一个类库GisFunctionalityGisFunctionality,在其中输,在其中输入函数入函数P103(2)P103(2)、P104(2)P104(2)、P105(5)P105(5)矩形和多边形查询

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号