本次使用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());
}

四:運作效果