天天看點

MapXtreme 2005 學習心得 使用WebTool工具(七)

本次使用webtool自定義工具,實作一個簡單的功能

效果描述:

在激發自定義工具後,在地圖界面點選時,彈出該點的用戶端坐标,與相應的經緯度坐标

一:先從用戶端處理怎麼發送請求

1:拖webtool工具到界面

将工具webtool 拖到mapform.aspx界面上,設定對應的地圖如下: 

<cc1:webtool id="webtool1" runat="server" mapcontrolid="mapcontrol1"   />

說明:

MapXtreme 2005 學習心得 使用WebTool工具(七)
MapXtreme 2005 學習心得 使用WebTool工具(七)

用戶端有三個重要的腳本:在項目mapxtremewebresources檔案夾下

1.interaction.js---互動類型腳本

(已實作的有:clickinteraction(單擊)、rectinteraction(畫矩形)..等等,基本是和已有工具對應的)

2.command.js----指令發送請求腳本

(已實作的有:mapcommand(擷取地圖)、pancommand(拖動地圖)、distancecommand(測量)..等等,基本是和已有工具對應的)

3.tool.js----------工具指令狀态激活腳本

(在激活不同的工具時,改變指令的請求參數)

MapXtreme 2005 學習心得 使用WebTool工具(七)

[現在開始處理自定義的用戶端腳本請求]

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

代碼如下:

MapXtreme 2005 學習心得 使用WebTool工具(七)

[serializable]

public class webinfogetxy:mapinfo.webcontrols.mapbasecommand

{

    public webinfogetxy()

    {

          base.name = "getxy";

    }

}

MapXtreme 2005 學習心得 使用WebTool工具(七)

然後,重寫一下process()方法輸出文本即可,代碼如下

MapXtreme 2005 學習心得 使用WebTool工具(七)
MapXtreme 2005 學習心得 使用WebTool工具(七)

    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);

MapXtreme 2005 學習心得 使用WebTool工具(七)

ok,服務端到此也就結束了

三:在頁面上用代碼注冊工具指令

MapXtreme 2005 學習心得 使用WebTool工具(七)
MapXtreme 2005 學習心得 使用WebTool工具(七)

       if (session.isnewsession)

        {

            mapinfo.webcontrols.mapcontrolmodel model = mapinfo.webcontrols.mapcontrolmodel.setdefaultmodelinsession();

            model.commands.add(new webinfogetxy());

        }

MapXtreme 2005 學習心得 使用WebTool工具(七)

四:運作效果

繼續閱讀