ArcGIS Web 应用开发框架(ADF)中的Ajax
生活随笔
收集整理的這篇文章主要介紹了
ArcGIS Web 应用开发框架(ADF)中的Ajax
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我希望各位看官在看這篇文章之前,先對.NET中內置的Ajax了解較透,如果還不是很明白,建議先看我的上一篇博文.NET內置的Ajax工作原理 ESRI ArcGIS Server 9.2 的web應用開發框架充分利用了ASP.NET中的回調技術。我們來看看利用Visual Studio 模板創建的默認應用程序中如何利用回調的。
首先看到默認的主頁面Default.aspx 對應的類 WebMapApplication 實現了 ICallbackEventHandler 接口。 我們再以Identify工具來深入了解應用開發框架。 在 WebMapApplication 類的 Load 事件處理器中,調用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 類的構造函數中,調用了SetupIdentify 方法。該方法首先通過調用 GetCallbackEventReference 方法來生成客戶端腳本,然后調用 RegisterClientScriptBlock 注冊一個名為 identifyCallbackFunctionString 的 JavaScript 函數,該函數中調用生成的客戶端腳本。 在 display_mapidentify.js 文件的 MapIdClick 函數(Identify 事件處理器)中調用了?identifyCallbackFunctionString 函數,從而觸發了?WebMapApplication 類的 RaiseCallbackEvent 方法。 RaiseCallbackEvent ?方法不僅需要處理 Identify 工具,還需要處理其他工具,本實例中包括關閉應用程序與獲取版權文本。為了在該方法中判斷是哪個工具啟動了該方法調用,需要在傳入在參數中包含表明調用“身份”。同時由于在傳入參數中還需要其他可能更多的信息,例如Identify工具,不僅需要表明調用者身份的信息,還需要當前用戶單擊處 X、Y 坐標信息。為了能在RaiseCallbackEvent ?方法中把這些信息都解釋出來,本實例使用的是
"參數名1=參數值1&參數名2=參數值2"
式。例如在 MapIdClick 函數中傳入的是
"ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify &minx="+zleft+"&miny="+ztop
而在 RaiseCallbackEvent 方法(或者是?RaiseCallbackEvent 中調用的?一個webservice方法,一個自定義類方法),通過調用?Split("&".ToCharArray ()) 方法將各個 “參數名=參數值” 放置到一組數組中,然后再通過建立哈希表的方式把“參數名” 與 “參數值” 分開,具體的代碼如下:
?? ? ? ? ? ?string[]?keyValuePairs;//含有”=“的數組
????????????string[]?keyValue;//只有字符串的數組
?? ? ? ? ? ?NameValueCollection?m_queryString?=?new?NameValueCollection?();//鍵值對的集合
?????????????keyValuePairs?=?eventArgument.Split("&".ToCharArray?());//eventArgument是客戶端傳入的參數
?????????????if?(keyValuePairs.Length?>?0)//如果傳遞的參數是argA=arg1&argB=arg2……形式的,也就是說參數不止一個
?????????????{
?????????????????for?(int?i?=?0;?i?<?keyValuePairs.Length;?i++)
?????????????????{
?????????????????????keyValue?=?keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
?? ? ? ? ? ? ? ? ? ? ?m_queryString?.Add(keyValue[0],?keyValue[1]);
?????????????????}
?????????????}
?????????????else//傳遞的參數只有一個
?????????????{
?????????????????keyValue?=?eventArgument.Split("=".ToCharArray());
?????????????????if?(keyValue.Length?>?0)//如果有參數傳遞過來的話
?????????????????{
?? ? ? ? ? ? ? ? ? ? ?m_queryString?.Add(keyValue[0],?keyValue[1]);
?????????????????}
?????????????}
?????????????//通過htQueryString["EventArg"]這種方式調用參數的值
?????????????return?"您選擇的工具名稱是:?"?+?m_queryString?["EventArg"].ToString()?;
通過執行上訴的代碼后,只需要調用m_queryString?["EventArg"]就能判斷是哪個工具啟動該方法的調用。如果是 Identify 工具,那么該值就為 MapIdentify 。 ?? ? ? ?在判斷出調用工具是 Identify 后, RaiseCallbackEvent 方法調用 MapIdentify 類的 Identify 方法得到返回值。
?? ? ? ?通過解析 Arcserver ADF 中的 Ajax ,就不難理解為什么利用 ArcServer ADF 開發的 webgis 產品中地圖的刷新是如此之快了。。。。。。。。。。。。。
首先看到默認的主頁面Default.aspx 對應的類 WebMapApplication 實現了 ICallbackEventHandler 接口。 我們再以Identify工具來深入了解應用開發框架。 在 WebMapApplication 類的 Load 事件處理器中,調用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 類的構造函數中,調用了SetupIdentify 方法。該方法首先通過調用 GetCallbackEventReference 方法來生成客戶端腳本,然后調用 RegisterClientScriptBlock 注冊一個名為 identifyCallbackFunctionString 的 JavaScript 函數,該函數中調用生成的客戶端腳本。 在 display_mapidentify.js 文件的 MapIdClick 函數(Identify 事件處理器)中調用了?identifyCallbackFunctionString 函數,從而觸發了?WebMapApplication 類的 RaiseCallbackEvent 方法。 RaiseCallbackEvent ?方法不僅需要處理 Identify 工具,還需要處理其他工具,本實例中包括關閉應用程序與獲取版權文本。為了在該方法中判斷是哪個工具啟動了該方法調用,需要在傳入在參數中包含表明調用“身份”。同時由于在傳入參數中還需要其他可能更多的信息,例如Identify工具,不僅需要表明調用者身份的信息,還需要當前用戶單擊處 X、Y 坐標信息。為了能在RaiseCallbackEvent ?方法中把這些信息都解釋出來,本實例使用的是
"參數名1=參數值1&參數名2=參數值2"
式。例如在 MapIdClick 函數中傳入的是
"ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify &minx="+zleft+"&miny="+ztop
而在 RaiseCallbackEvent 方法(或者是?RaiseCallbackEvent 中調用的?一個webservice方法,一個自定義類方法),通過調用?Split("&".ToCharArray ()) 方法將各個 “參數名=參數值” 放置到一組數組中,然后再通過建立哈希表的方式把“參數名” 與 “參數值” 分開,具體的代碼如下:
?? ? ? ? ? ?string[]?keyValuePairs;//含有”=“的數組
????????????string[]?keyValue;//只有字符串的數組
?? ? ? ? ? ?NameValueCollection?m_queryString?=?new?NameValueCollection?();//鍵值對的集合
?????????????keyValuePairs?=?eventArgument.Split("&".ToCharArray?());//eventArgument是客戶端傳入的參數
?????????????if?(keyValuePairs.Length?>?0)//如果傳遞的參數是argA=arg1&argB=arg2……形式的,也就是說參數不止一個
?????????????{
?????????????????for?(int?i?=?0;?i?<?keyValuePairs.Length;?i++)
?????????????????{
?????????????????????keyValue?=?keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
?? ? ? ? ? ? ? ? ? ? ?m_queryString?.Add(keyValue[0],?keyValue[1]);
?????????????????}
?????????????}
?????????????else//傳遞的參數只有一個
?????????????{
?????????????????keyValue?=?eventArgument.Split("=".ToCharArray());
?????????????????if?(keyValue.Length?>?0)//如果有參數傳遞過來的話
?????????????????{
?? ? ? ? ? ? ? ? ? ? ?m_queryString?.Add(keyValue[0],?keyValue[1]);
?????????????????}
?????????????}
?????????????//通過htQueryString["EventArg"]這種方式調用參數的值
?????????????return?"您選擇的工具名稱是:?"?+?m_queryString?["EventArg"].ToString()?;
通過執行上訴的代碼后,只需要調用m_queryString?["EventArg"]就能判斷是哪個工具啟動該方法的調用。如果是 Identify 工具,那么該值就為 MapIdentify 。 ?? ? ? ?在判斷出調用工具是 Identify 后, RaiseCallbackEvent 方法調用 MapIdentify 類的 Identify 方法得到返回值。
?? ? ? ?通過解析 Arcserver ADF 中的 Ajax ,就不難理解為什么利用 ArcServer ADF 開發的 webgis 產品中地圖的刷新是如此之快了。。。。。。。。。。。。。
轉載于:https://www.cnblogs.com/gisland/archive/2009/09/14/1566599.html
總結
以上是生活随笔為你收集整理的ArcGIS Web 应用开发框架(ADF)中的Ajax的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在IE中使用Firebug
- 下一篇: 全排列递归实现的讨论