跌倒的马铃薯

 

MapXtreme2004的Web选择控件

 

MapXtreme2004Web选择控件

以下仅为个人分析结果,不当的地方请指正。

       Web控件在MapXtreme里面所占的分量很少,很多的功能都没有。与Google Map相比而言,MapXtreme2004的WebGIS真的很过时了。但是项目不可能说变就变,该用什么就还得用什么。听说MapXtreme2005有很大的改观,我得找机会研究研究。

       在MapXtreme2004里面的选择控件有一个可能是bug的现象:控件的选择事件(SelectChanged)会多次被触发,并且触发后传入对象的值还不一定相同。随着不断在地图上操作,触发的次数会不断增多。

       不知道用过MapXtreme2004的同行有没有遇到这样的问题,有没有什么解决的办法。

       我们还是先看一下他的结构:

      




       跟用户操作有关的控件有两个分支:MapTool(MapInfoMapTool继承自MapTool)和ToolControl。MapTool分支封装了跟地图操作相关的功能。ToolControl继承自System.Web.UI.WebControls.WebControl,实现了控件设计时、客户端脚本等。应该说ToolControl分支是MapTool分支和Asp.net的桥梁。

MapTool Class

包含业务逻辑的控件的抽象类,所有的MapInfo工具都起源于它并实现了其中的业务逻辑。包括自定义工具也应该继承它。

其中比较关键的两个函数:Execute            包含制定的业务逻辑,每个工具都是通过此函数实现功能的。

                                          ExtractPoints         从字符串中析取点集合

 

MapInfoMapTool Class

继承自MapTool,包含了MapXtreme特殊工具的一些公共的功能特性。关键点是多了一个 MapToolAction的事件。

 ZooOutMapTool、DistanceMapTool、ZoomInMapTool、CenterMapTool、InfoMapTool、PanMapTool

继承自MapInfoMapTool,分别实现缩小、测距、放大、定位、点信息、平移功能。关键点是根据不同的功能实现了Execute方法,并触发MapToolAction事件。

 MapInfoSelectionMapTool Class

也继承自MapInfoMapTool,包含了所有选择控件的公共特性。关键点是多了一个SelectionChanged事件。

文章开头描述的问题就出在这个SelectionChanged事件上。因为这个SelectionChanged事件实际是用Session.Current.Selections.DefaultSelection.SelectionChangedEvent += SelectionChangedEventHandler;进行绑定的。当它与ToolControl结合时需要将SelectionChanged事件与开发者的SelectionChangedEventHandler绑定。随着页面的刷新,此绑定会在每次刷新时被执行。但是Session.Current.Selections.DefaultSelection.SelectionChangedEvent是被服务器保存了的,多次执行必然使得事件绑定了多个相同函数。这应该就是为什么只有选择控件会不断增加触发事件次数的原因吧。至于为什么每次触发传入的对象的值不同,我想应该是Session.Current.Selections.DefaultSelection.SelectionChangedEvent本身会有几次触发。这个有待研究中。

 RadiusSelectionMapTool、PolygonSelectionMapTool、RectangleSelectionTool、PointSelectionMapTool

继承自MapInfoSelectionMapTool,分别实现圆形、多边形、矩形、点选择功能。关键点是根据不同的功能实现了Execute方法,并触发MapToolAction事件。注意这些功能并不会触发SelectionChanged事件。

通过以上的说明,应该对MapTool有了一个大体了解。这个可以为我门编写MapXtreme服务器端控件打下基础。

posted on 2006-07-24 18:09  Ivan  阅读(1554)  评论(0编辑  收藏  举报

导航