发表用户:henanlujun
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?boardID=23&ID=9105
信息原始来源:henanlujun

文章标题:在MapXTreme2004中创建自定义工具: 过程、思路及代码


相关代码下载: 下载地址1

下载要求:论坛注册用户

文档介绍:

前段时间,在使用MapXtreme 2004开发Web程序的时候,需要自己定义一个测量面积的工具。为此,查了一些资料,走了不少弯路,总算做成了,现在总结一下,和大家分享。

一般实现

一般来说,要自定义工具,只需要从MapInfo.Web.UI.WebControls.MapTool继承,创建一个子类即可,里面关键要指定:ClientCodeSource、ClientStartMethod、ClientStopMethod、CursorUrl属性,并重载Execute方法,自定制工具的逻辑就在该方法内实现。

这样,通过指定:MapControl.MapTools.CurrentTool 就可以实现了。

但是,这样的实现,功能单一,而且也将功能写死了,下面介绍一种功能稍微完整但有些复杂的方法。

复杂实现

实现思路如下:

  • 集成EventArgs类,创建自定义工具的事件参数,如:customAreaToolEnventArgs。
  • 继承MapInfo.Web.UI.WebControls.MapTool类,创建自己的子类。
    • 在该类中指定ClientCodeSource、ClientStartMethod、ClientStopMethod、CursorUrl等属性,
    • 在该类中加入时间和事件处理器;

如:

publicdelegatevoid customAreaToolEventHander( Object sender, customAreaToolEnventArgs e );

publiceventcustomAreaToolEventHander CalculateFinished;

    • 并重载Execute方法,并在该方法中触发事件。
  • 将自定义的工具创建成控件。
  • 在Html文件中使用TagPrefix注册该控件。

如:

<%@ Register TagPrefix=”myareatoolconrol” NameSpace=”WebGIS” Assembly=”WebGIS” %>

 

说明:这里的namespace 和 Assembly 根据自己程序设定而改变。

  • 在<mapinfowebuiwebcontrols:ToolbarControl>

</mapinfowebuiwebcontrols:ToolbarControl>

中加入该控件。

如:

<mapinfowebuiwebcontrols:ToolbarControl id="ToolbarControl1" runat="server" Width="960px" MapID="MapControl1">

<mapinfowebuiwebcontrols:ZoomInToolControl id="ZoomInToolControl1" runat="server" MapID="MapControl1" TooltipText="放大地图,可以单击地图,也可以按着鼠标在地图上拖矩形"

InactiveImageUrl="\WebGIS\resources\bnt_1.gif" ActiveImageUrl="\WebGIS\resources\bnt2_1.gif"></mapinfowebuiwebcontrols:ZoomInToolControl>

<mapinfowebuiwebcontrols:DistanceToolControl id="DistanceToolControl1" runat="server" MapID="MapControl1" TooltipText="测量地图上两点或多点之间的距离"

InactiveImageUrl="\WebGIS\resources\bnt_9.gif" ActiveImageUrl="\WebGIS\resources\bnt2_9.gif" DistanceType="0" DistanceUnit="Kilometer"></mapinfowebuiwebcontrols:DistanceToolControl>

<myareatoolcontrol:customAreaToolControl id="myareatoolcontrol" runat="server" MapID="MapControl1" InactiveImageUrl="\WebGIS\resources\btn_测量面积.jpg"

ActiveImageUrl="\WebGIS\resources\but2_测量面积.jpg"></myareatoolcontrol:customAreaToolControl>

</mapinfowebuiwebcontrols:ToolbarControl>

  • 加入事件处理函数。

在VS 2003 .NET开发环境中,通过该控件的事件属性,可以很容易的加入该事件。

如:

privatevoid myareatoolcontrol_CalculateFinished(object sender, WebGIS.customAreaToolEnventArgs e)

{

this.TextBox1.Text = string.Format("测量面积:\n{0}\n平方公里", e.Area );

}

上面也许说的不清楚,为了清楚起见,我把创建自定义控件的C#文件也贴上来,供大家交流。有什么问题,可以MSN联系:henan_lujun@hotmail.com