ArcGIS Server 开发系列(五)

上传人:z**** 文档编号:114224814 上传时间:2022-06-28 格式:DOC 页数:9 大小:176KB
收藏 版权申诉 举报 下载
ArcGIS Server 开发系列(五)_第1页
第1页 / 共9页
ArcGIS Server 开发系列(五)_第2页
第2页 / 共9页
ArcGIS Server 开发系列(五)_第3页
第3页 / 共9页
资源描述:

《ArcGIS Server 开发系列(五)》由会员分享,可在线阅读,更多相关《ArcGIS Server 开发系列(五)(9页珍藏版)》请在装配图网上搜索。

1、前面的开发系列均是使用server开发模板程序Web Mapping Application工具条上的基本工 具是已经在模板中定制好的,在实际项目应用中,我们需要的工具远远不仅如此,如何在工 具条中增加新的自定义工具是开发系列(五)所要描述的,其中使用 ASP.Net 2.0 Callback framework 进行异步刷新地图是重点。目标: 自定义工具按钮进行矩选查询,高亮显示所选择的地图要素,页面下方的 Gridview 显 示所选择要素的属性信息。准备工作:1. 了 解 ESRI.ArcGIS.Server.WebControls.IMapServerToolAction 接口2. 了

2、解 ASP.Net 2.0 Callback framework3. 新建一个网站,在ArcGIS Web Controls控件中拖动如下控件:Toolbar、Map、Toe、 MapResourceManager,以及常用控件 Label、DropDownList、Gridview。4. 设置控件属性,Toolbar、Toc 的 BuddyControls 均为 Map1, Toolbar 的 BuddyControlType 为 Map, Map 控件的 MapResourceManager 为 MapResourceManager1。5. 更改 MapResourceManager 属性

3、,添加两个 Resource: Selection 和 NorthAmerica,类型分别是 Graphics Layer 和 ArcGIS Server Internet 。 最后视图效果:思路:现在重新想想我们要做什么,首先要自定义一个工具按钮,使用该工具后在地图上进行 矩形选择,对选择的要素高亮显示,同时 gridview 显示出这些要素的属性信息。整个过程 看似容易,实际上需要在客户端和服务器端之间来回切换,异步调用,这里用到了 ASP.Net Callback framework,其实Server中很多地图操作都基于 callback,或是实现了 ICallbackEventHand

4、ler接口,理解了这一段程序开发有利于深入了解Server地图刷新、Task 等组件的工作机制。首先在Toolbar上新增一个按钮Select Features,上图其实已经加入了,加入的方法是, 选择Toolbar控件属性ToobarItems,添加一个Tool,设置以下值:Text:Select FeatureCientActionragRectangleName:SelectToolServerActionAssembly:App_CodeServerActionClass:SelectFeaturesOK,搞定!除了上述属性外,还可以设置该按钮各种状态下的图片显示、 ToolTip 等

5、等,这里就省 了,纵观这些属性,可以看出既有 js 脚本的交互(已经封装了,通过 ToolEventArgs 传入), 也 有 服 务 器 端 功 能 的 实 现 , 这 时 我 们 需 新 建 一 个 类 SelectFeatures , 并 实 现 IMapServerToolAction 接口,类中实现 IMapServerToolAction 的方法 ServerAction。publicclass SelectFeatures : IMapServerToolAction publicvoid ServerAction(ToolEventArgs args)代码实现:1.获取矩形框的

6、屏幕坐标要查询矩选的地图信息,首先应知道矩形的坐标,在服务器端如何获取呢?Map mapctrl = null;mapctrl = (Map)args.Control;/ 获取下拉框中的数据,在后面实现string targetlayername = (string)mapctrl.Page.SessionTargetLayer;RectangleEventArgs rectargs = null;/ 强制类型转换为 RectangleEventArgs rectargs = (RectangleEventArgs)args;/ 获取矩形选择框的屏幕坐标System.Drawing.Recta

7、ngle 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.ToMa

8、pPoint(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 获 取 , 它 是 一 个对象,包含了客户端 Map 控件和当

9、前 客户端工具的信息, RectangleEventArgs 是它的子类,强制性转换后得到矩选的矩形坐标, 最后得到一个 Envelope,用于 spatialfilter.Geometry 属性。2. 查询所选择的要素并对 Graphics Layer 进行渲染实现高亮这部分内容完全可以参考ArcGIS Server开发系列(三)-漫游Graphics data sources, 只需要注释掉WhereClause属性赋值,再增加一行代码: ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.Sp

10、atialFilter(); 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 = vis

11、ible;/ 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();/ innerco

12、ntent 相当于 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.styl

13、e.visibility = + showtable +;oa0 = sa;CallbackResult cr1 = new CallbackResult(null, null, javascript, oa); mapctrl.CallbackResults.Add(cr1);这段代码最关键的类是CallbackResult,它简化了 web adf framework中客户端回调的处 理,不用再创建自己的客户端和服务器端逻辑,使用CallbackResult就可以将信息传回客户 端,更新客户端页面的内容、图片或执行js脚本。关于CallbackResult构造方法第三个参数, 下面 js

14、代码写的很详细: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 (acti

15、ons1 + was null);elseif (action=javascript) eval(actions3);4.填充 DropDownListDropDownList 显示的是 ArcGIS Server Internet 地图数据源所包含的图层名称,选择哪 个图层,矩选时就对哪个图层进行查询,DropDownList的填充在Page_PreRender过程中。 if (!IsPostBack)ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionalitymf=(ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctio

16、nality)Map1.GetFunctionality(1);ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = mf.Resource;boolsupported=gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctional ity);if (supported)ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionalityqfunc=(ESRI.ArcGIS.ADF.

17、Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeo f(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);SessionTarget

18、Layer = LayerDropDownList1.Items0.Value;5.实现 ICallbackEventHandler 接口Default.aspx.cs 的 _Default 实 现 ICallbackEventHandler 接 口 , 在 类 中 实 现 RaiseCallbackEvent 和 GetCallbackResult 两个方法,做 ASPNet 2.0 的对 ICallbackEventHandler 应该是再熟悉不过了但下来框显示图层为什么要用到 callback?protected void Page_Load(object sender, EventAr

19、gs 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 p

20、arser_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

21、 GetCallbackResult()return returnstring;原因就在这里,改变Session TargetLayer啲值,SelectFeatures需要知道是对哪个图层 进行查询的,从而对在那个图层选择要素进行高亮及属性显示,这里 callback 仅仅是在做 了变量值的处理。最后在页面之间加入 js 脚本 ChangeLayer()。var context;function ChangeLayer()var message;var ddl1value = document.getElementById(LayerDropDownList1).value;message

22、= ddl1;message += , + ddl1value;运行程序:QSelect| Zoom InZoom OutPanFull ExtentFeatures |Active Layer:United States0 Selection-HNorthAment+ 0 Cana+ 0 Mexic+ 0 Unite + 0 Centr:FID AREA STATE_NAME STATE_HPS SUB_KEGION STATE_ABBR Pi597803.199Wyoming56MtnWY45783343.643Idaho16MtnID101477330.258Nebraska31WNCe

23、nNE15其中黄色区域就是 Select Features 按钮矩选的要素,下方 gridview 显示了查询到的属性 结果。程 序 中 有 两 个 地 方 用 到 了 异 步 刷 新 , 一 个 是 ASP.Net 2.0 原 有 接 口 ICallbackEventHandler,另一个是 Web ADF framework 的 CallbackResult 类,最初认为简单 异步刷新用自己写的 XMLHttpRequest 请求更为简单,如上例中对 session 存储值的改变, 不用 ICallbackEventHandler,但是在 server 地图互操作的过程中,ICallbac

24、kEventHandler 给 我们提供了更多的便利。继续思考:1. 本例实现了根据地图查询属性,反过来根据属性查询几何图形怎么实现呢?其实前面 ArcGIS Server开发系列(三)-漫游Graphics data sources已经讲到了,只不过需要将 条件查询的信息,更改为在 gridview 或其他地方选择的属性信息,然后高亮显示相应的几 何要素。2. 这种几何要素图形和属性信息的关联可以应用于各种不同的业务需求中,如图形和属性的同步删除、位置定位、类似结果查询等等。3. 如何改进或提升这种图形和属性的异步刷新带来的用户体验?网址:本篇文 章来 源于 GIS 空间站 转载请以链接形式注明出处

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!