Sharpmap AjaxMapControl 分析

(一)概述
sharpmap中的ajaxmapcontrol使用asp.net 2.0提供的ICallbackEventHandler接口实现页面无刷新地图更新。

本质上ICallbackEventHandler接口底层是XMLHTTP,而XMLHTTP是当前非常热门的Ajax的基础。这也许就是sharpmap 作者将这个实现了ICallbackEventHandler接口的地图控件命名为ajaxmapcontrol 的原因吧。

ICallbackEventHandler机制是ajaxmapcontrol的核心所在。单纯从编程角度看,ICallbackEventHandler的编程比使用ms.ajax之类的开发套件编程要复杂一些。而然,ICallbackEventHandler 快捷轻量级特性,在ajaxmapcontrol样的控件中更为适用。

(二)Sharpmap AjaxMapControl 组成
ajaxmapcontrol 实际上是由两个部分组成的:一个是服务器控件;另一个是名为AjaxMap.js 客户端脚本文件。

(三)工作过程
ajaxmapcontrol 主要工作过程
1.   客户端浏览器请求带有 ajaxmapcontrol 的网页。
2.   在浏览器中,用户用鼠标操纵地图图象。鼠标的点击/拖动事件首先被来自AjaxMap.js 脚本函数截获,接着,脚本对服务器发出回调请求(WebForm_DoCallback)。这个调用采用 XMLHTTP 方式请求服务器 Generic Handler,并将鼠标交互产生的各个参数以 Get 方式发送给 Generic Handler;在调用WebForm_DoCallback 时,WebForm_DoCallback 也向 XMLHTTP 注册一个接收处理函数。
3.   在服务器上, Generic Handler 响应客户端回调请求,并根据来自客户端的参数(都是与地图图象有关的参数)生产新的地图图象。并将图象返回给客户端。
4.   XMLHTTP 利用注册的接收处理函数,将来自服务器的新的地图图象显示在页面上。

(四)说明
1.   虽然在 AjaxMapControl 实现了 ICallbackEventHandler 接口,但在服务器端真正响应客户端回调请求的并不是控件本身。服务器端响应客户请求的处理程序由 Generic Handler 完成。
2.   脚本文件是 AjaxMapControl 内嵌资源(Embedded Resource)并被编译到 DLL 中。在 AssemblyInfo.cs 加入[assembly: System.Web.UI.WebResource("SharpMap.UI.Web.UI.Ajax.AjaxMap.js", "text/javascript")],当在客户端浏览器中请求带有ajaxmapcontrol网页后,该网页就能通过 WebResource.axd 请求封入 DLL 的 AjaxMap.js 脚本文件。这样做的好处是可以在客户端缓冲该脚本文件。
3.   在浏览器中,引发脚本向服务器发出回调的操作有两个:拖动地图(Pan)操作和缩/放操作(Zoom in/out)操作;
4.   客户端脚步函数 SharpMap_BeginRefreshMap(obj,dofade)  完成对服务器回调请求。

 

 

posted @ 2007-06-11 22:48  protorock  阅读(1350)  评论(3编辑  收藏  举报