• MapXtreme 2005 学习心得 使用WebTool工具(七)


    本次使用WEbTool自定义工具,实现一个简单的功能

    效果描述:

    在激发自定义工具后,在地图界面点击时,弹出该点的客户端坐标,与相应的经纬度坐标

    一:先从客户端处理怎么发送请求

     

    1:拖webtool工具到界面

    将工具WebTool 拖到MapForm.aspx界面上,设置对应的地图如下: 

    <cc1:WebTool ID="WebTool1" runat="server" MapControlID="MapControl1"   />

    说明:

    客户端有三个重要的脚本:在项目MapXtremeWebResources文件夹下

    1.Interaction.js---交互类型脚本

    (已实现的有:ClickInteraction(单击)、RectInteraction(画矩形)..等等,基本是和已有工具对应的)

    2.Command.js----命令发送请求脚本

    (已实现的有:MapCommand(获取地图)、PanCommand(拖动地图)、DistanceCommand(测量)..等等,基本是和已有工具对应的)

    3.Tool.js----------工具命令状态激活脚本

    (在激活不同的工具时,改变命令的请求参数)

    [现在开始处理自定义的客户端脚本请求]

    2:设置工具属性事件为点击

    交互:由于要实现的功能,交互类型也是通过点击引发的,交互就直接使用已有的ClickInteraction

    因此设置工具属性:ClientInteraction="ClickInteraction"

    3:设置工具命令[使用测量工具的命令功能]

    命令:由于要实现的功能,客户端类型在接收服务端返回的消息后,直接弹出,这点和测量功能是一样的,于是命令就直接使用DistanceCommand

    因此设置工具属性:ClientCommand="DistanceCommand"

    4:自定义命令关键字

    再设置一个自定义命令文本:Command="GetXY" --这个GetXY是随便起的名字,等一下对应服务端的请求命令

    OK,至此,客户端处理完成,实际我们什么也没做,只是把工具往界面一拖,然后设置了一下属性:

    <cc1:WebTool ID="WebTool1" runat="server" MapControlID="MapControl1"  ClientInteraction="ClickInteraction" Command="GetXY" ClientCommand="DistanceCommand" />

    二:服务端接收请求并输出信息

     

    1:新建自定义命令类:WebInfoGetXY

    在App_Code里,我们新建一个类,叫WebInfoGetXY,让它继承自MapInfo.WebControls.MapBaseCommand

    同时加上可序列化属性[Serializable],不加就报错了,配置文件那节里有说到

    在构造函数里,写base.Name = "GetXY";//这个就对应了客户端发送的Command

    代码如下:

    [Serializable]
    public class WebInfoGetXY:MapInfo.WebControls.MapBaseCommand
    {
        
    public WebInfoGetXY()
        {
              
    base.Name = "GetXY";
        }
    }

    然后,重写一下Process()方法输出文本即可,代码如下

        public override void Process()
        {
            MapControlModel model 
    = MapControlModel.GetModelFromSession();
            MapInfo.Mapping.Map map 
    = model.GetMapObj(MapAlias);
            System.Drawing.Point[] points 
    = ExtractPoints(DataString);
            MapInfo.Geometry.DPoint dpoint 
    = new MapInfo.Geometry.DPoint();
            map.DisplayTransform.FromDisplay(points[
    0], out dpoint);//屏幕xy转经纬度

            
    string outText="屏幕xy:" + points[0].X + "," + points[0].Y;
            outText
    += "<br>经纬度xy:" + dpoint.x +","+ dpoint.y;
            HttpContext.Current.Response.Write(outText);
        }

    OK,服务端到此也就结束了

    三:在页面上用代码注册工具命令

           if (Session.IsNewSession)
            {
                MapInfo.WebControls.MapControlModel model = MapInfo.WebControls.MapControlModel.SetDefaultModelInSession();
                model.Commands.Add(new WebInfoGetXY());
            }

     

    四:运行效果

    在激发自定义工具后,在地图界面点击时,弹出该点的客户端坐标,与相应的经纬度坐标

     提供代码下载:点击下载 

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    WPF图片背景平铺
    Wpf中Dispatcher.Invoke和Dispatcher.BeginInvoke的区别
    node js 使用MSSQL 连接数据库
    WPF 自定义ProgressBar进度条样式
    mail 模板
    git提交Visual Studio程序代码如何避开bin和obj等文件
    C#软件license管理(简单软件注册机制)
    c# 异常处理 try catch finally
    Android APP 开机启动速度慢的问题
    axios 上传文件_大规格文件的上传优化
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1595969.html
Copyright © 2020-2023  润新知