




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目标: 自定义工具按钮进行矩选查询,高亮显示所选择的地图要素,页面下方的Gridview显示所选择要素的属性信息。 准备工作: 1.了解ESRI.ArcGIS.Server.WebControls.IMapServerToolAction接口 2.了解ASP.Net 2.0 Callback framework 3.新建一个网站,在ArcGIS Web Controls控件中拖动如下控件:Toolbar、Map、Toc、MapResourceManager,以及常用控件Label、DropDownList、Gridview。 4.设置控件属性,Toolbar、Toc的BuddyControls均为Map1,Toolbar的BuddyControlType为Map,Map控件的MapResourceManager为MapResourceManager1。 5.更改MapResourceManager属性,添加两个Resource:Selection和NorthAmerica,类型分别是Graphics Layer和ArcGIS Server Internet。 最后视图效果: 思路: 现在重新想想我们要做什么,首先要自定义一个工具按钮,使用该工具后在地图上进行矩形选择,对选择的要素高亮显示,同时gridview显示出这些要素的属性信息。整个过程看似容易,实际上需要在客户端和服务器端之间来回切换,异步调用,这里用到了ASP.Net Callback framework,其实Server中很多地图操作都基于 callback,或是实现了ICallbackEventHandler接口,理解了这一段程序开发有利于深入了解Server地图刷新、Task等组件的工作机制。 首先在Toolbar上新增一个按钮Select Features,上图其实已经加入了,加入的方法是,选择Toolbar控件属性ToobarItems,添加一个Tool,设置以下值: Text:Select Feature CientActionragRectangle Name:SelectTool ServerActionAssembly:App_Code ServerActionClass:SelectFeatures OK,搞定! 除了上述属性外,还可以设置该按钮各种状态下的图片显示、ToolTip等等,这里就省了,纵观这些属性,可以看出既有js脚本的交互(已经封装了,通过 ToolEventArgs传入),也有服务器端功能的实现,这时我们需新建一个类SelectFeatures,并实现 IMapServerToolAction接口,类中实现IMapServerToolAction的方法ServerAction。publicclass SelectFeatures : IMapServerToolAction publicvoid ServerAction(ToolEventArgs args) 代码实现: 1.获取矩形框的屏幕坐标 要查询矩选的地图信息,首先应知道矩形的坐标,在服务器端如何获取呢?Map mapctrl = null;mapctrl = (Map)args.Control;/ 获取下拉框中的数据,在后面实现string targetlayername = (string)mapctrl.Page.SessionTargetLayer;RectangleEventArgs rectargs = null;/ 强制类型转换为RectangleEventArgsrectargs = (RectangleEventArgs)args;/ 获取矩形选择框的屏幕坐标System.Drawing.Rectangle rect = rectargs.ScreenExtent;ESRI.ArcGIS.ADF.Web.Geometry.Point minpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(rect.Left, rect.Bottom, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);ESRI.ArcGIS.ADF.Web.Geometry.Point maxpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(rect.Right, rect.Top, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);ESRI.ArcGIS.ADF.Web.Geometry.Envelope mappoly = null;/ minpnt、maxpnt分别是左下、右上坐标点mappoly = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(minpnt, maxpnt); 所有的信息都是通过args获取,它是一个ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs对象,包含了客户端Map控件和当前客户端工具的信息,RectangleEventArgs是它的子类,强制性转换后得到矩选的矩形坐标,最后得到一个 Envelope,用于spatialfilter.Geometry属性。 2.查询所选择的要素并对Graphics Layer进行渲染实现高亮 这部分内容完全可以参考ArcGIS Server 开发系列(三)-漫游 Graphics data sources,只需要注释掉WhereClause属性赋值,再增加一行代码:ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter();spatialfilter.ReturnADFGeometries = false;spatialfilter.MaxRecords = 1000;/spatialfilter.WhereClause = txtQuery.Text;spatialfilter.Geometry = mappoly; 3.异步刷新Gridview显示地图要素的属性GridView gdview = (GridView)mapctrl.Page.FindControl(GridView1);object oa = newobject1;string showtable = visible;/ datatable为矩选时所选择的地图要素,绑定到gridviewgdview.DataSource = datatable;gdview.DataBind();string returnstring = null;using (System.IO.StringWriter sw = new System.IO.StringWriter()HtmlTextWriter htw = new HtmlTextWriter(sw);gdview.RenderControl(htw);htw.Flush();returnstring = sw.ToString();/ innercontent相当于innerhtmlCallbackResult cr = new CallbackResult(div, griddiv, innercontent, returnstring);/ 通过回调将信息从服务器端传输到客户端mapctrl.CallbackResults.Add(cr);if (datatable.Rows.Count 1)showtable = visible;elseshowtable = hidden;string sa = var griddiv = document.getElementById(griddiv);sa += griddiv.style.visibility = + showtable +;oa0 = sa;CallbackResult cr1 = new CallbackResult(null, null, javascript, oa);mapctrl.CallbackResults.Add(cr1); 这段代码最关键的类是CallbackResult,它简化了web adf framework中客户端回调的处理,不用再创建自己的客户端和服务器端逻辑,使用CallbackResult就可以将信息传回客户端,更新客户端页面的内容、图片或执行js脚本。关于CallbackResult构造方法第三个参数,下面js代码写的很详细:if (action=content) o = document.getElementById(actions1);if (o != null)o.outerHTML=actions3;elseif (action=innercontent) o = document.getElementById(actions1);if (o != null)o.innerHTML=actions3;elseif (action=image) o = document.imagesactions1;if (o != null)o.src = actions3;else alert (actions1 + was null); elseif (action=javascript) eval(actions3); 4.填充DropDownList DropDownList显示的是ArcGIS Server Internet地图数据源所包含的图层名称,选择哪个图层,矩选时就对哪个图层进行查询,DropDownList的填充在Page_PreRender过程中。if (!IsPostBack) ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mf = (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality)Map1.GetFunctionality(1); ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = mf.Resource; bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality); if (supported) ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null); string lids; string lnames; qfunc.GetQueryableLayers(null, out lids, out lnames); for (int i =0; i lnames.Length; i+) LayerDropDownList1.Items.Add(lnames); SessionTargetLayer = LayerDropDownList1.Items0.Value; 5.实现ICallbackEventHandler接口 Default.aspx.cs的_Default实现ICallbackEventHandler接口,在类中实现RaiseCallbackEvent和GetCallbackResult两个方法,做ASP.Net 2.0的对ICallbackEventHandler应该是再熟悉不过了但下来框显示图层为什么要用到callback?protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) SessionTargetLayer = ; LayerDropDownList1.Attributes.Add(onchange, ChangeLayer(); sADFCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, message, processCallbackResult, context, postBackError, true);public void ChangeDropDownListServer(string ea) char parser_char = , ; string messages = ea.Split(parser_char); string dll1 = messages1; SessionTargetLayer = dll1;ICallbackEventHandler 成员#region ICallbackEventHandler 成员public void RaiseCallbackEvent(string eventArgument) if (eventArgument.Contains(ddl1) ChangeDropDownListServer(eventArgument); publicstring GetCallbackResult() return returnstring; 原因就在这里,改变Session TargetLayer的值,SelectFeatures需要知道是对哪个图层进行查询的,从而对在那个图层选择要素进行高亮及属性显示,这里 callback仅仅是在做了变量值的处理。最后在页面之间加入js脚本ChangeLayer()。var context;function ChangeLayer() var message; var ddl1value = document.getElement
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风机买卖购销合同范本
- 工地供货意向合同范本
- 固安房屋租赁合同范本
- 补课班托管合同范本
- 照明芯片采购合同范本
- 茶叶采购加工合同范本
- 防疫酒店安保合同范本
- 和香港公司合同范本
- 策划管理合同范本
- 茶叶采购合同范本
- 化学(基础模块)中职PPT完整全套教学课件
- 京东集团员工手册-京东
- 2023年苏州市星海实验中学小升初分班考试数学模拟试卷及答案解析
- GB/T 37915-2019社区商业设施设置与功能要求
- GB/T 31298-2014TC4钛合金厚板
- GB/T 27746-2011低压电器用金属氧化物压敏电阻器(MOV)技术规范
- GB/T 22237-2008表面活性剂表面张力的测定
- GB/T 13667.3-2003手动密集书架技术条件
- 导轨及线槽项目投资方案报告模板
- 复旦大学<比较财政学>课程教学大纲
- 书法的章法布局(完整版)
评论
0/150
提交评论