ArcIMS是採用標準網路通訊協定開發的分布式互操作多層的地圖軟體產品。Web伺服器通過連接器(connector)訪問ArcIMS的應用伺服器(Application Server)和空間伺服器(Spatial Server),動態產生地圖。ArcIMS提供多種連接器:servlet、Java、ColdFusion、 ActiveX以及隨同ArcIMS 9發布的——.NET Link。
本文將討論如何用.NET Link定製ArcIMS的用戶端。ArcIMS 9要求有.NET Framework 1.1和.NET Framework 1.1 SDK的情況下才能安裝.NET Link和開發協助。
為什麼要使用.NET Link
有了.NET Link,與ArcIMS的互動可使用.NET語言,如VB.NET或C#。Active Server Pages .NET (ASP.NET)是使用.NET構建網頁的技術。與JavaScript等在用戶端執行代碼不同,.NET的代碼在伺服器端執行,這帶給開發人員諸多好處。
第一,實際上,通過Internet只傳送伺服器端代碼執行的結果。這樣支援瘦用戶端,減少用戶端處理和網路下載的時間。
第二,伺服器端代碼有許可權可以訪問伺服器的檔案系統和資料庫。如果開發人員需要建立一個根據使用者在地圖上的點擊,向資料庫添加新資訊的網站,就必須要在伺服器端進行處理。與其它的WEB開發環境相比,ASP.NET的好處是由Visual Studio .NET等開發環境提供的事件驅動機制。在Visual Studio .NET中寫代碼很簡單,例如只用把按鈕拖動到表單(form)上,再寫點擊該按鈕後在伺服器端執行的代碼。而表單如何傳遞到伺服器,如何運行代碼等細節都由事件驅動機制來處理。
使用.NET Link
雖然.NET Link有幾個對象可用於接發ArcXML,或產生幾個預定義的ArcXML請求,但最主要的對象是ServerConnection。ServerConnection可定義到應用伺服器(Application Server)和ArcIMS服務(Service)的串連,用於接發請求。Listing 1中用了ServerConnection。
圖1 採用ServerConnection的send方法發送ArcXML請求
要發送一個ArcXML請求,使用ServerConnection的send方法:conn.Send(sAXL) sAXL變數是包含完整ArcXML請求的字串。AXLRequests對象可建立幾個預定義的ArcXML請求,如針對全圖範圍的GET_SERVICE_INFO,GETCLIENTSERVICES和GET_IMAGE。
建立和解析ArcXML
要使用.NET Link,開發人員必須要建立ArcXML請求和處理ArcXML響應。文章ArcXML Programmer’s Reference Guide提供解析ArcXML的文法。.NET中很多個物件可協助我們實現XML的產生和解析。字串可合并或用StringBuilder對象來建立。XMLDocument對象可表示整個響應,響應中的每個元素(element)表示為一個節點(node)。節點由元素、屬性和所有的子項目組成。Listing 2中,ServerConnection用於發送ArcXML請求,得到的響應放在XMLDocument對象中。
XMLNodeList可用於得到特殊元素的集合,如Listing 3。當建立了XMLNodeList,可通過item屬性(預設的屬性)來訪問某個節點。可訪問每個節點的所有子節點(子項目)和屬性。如果發送GET_IMAGE請求,得到新圖片URL的代碼如Listing 4。
通過.NET Link建立一個簡單地圖
下面說明如何建立有地圖的簡單頁面。這個例子的前提是ArcIMS和.NET Link安裝在一起,名為sample的Image Service(映像服務)和Visual Studio .NET都在運行。sample服務使用的資料是全球(國家)的地理座標的資料。
圖2 建立展示地圖的地區,從Web Forms分類中拖放圖片。改變地圖ID屬性為theMap
1. 在Visual Studio.NET中,建立一個ASP.NET的Web application。本例子用VB.NET寫成。
2. 添加ESRI ArcIMS.NET Link引用
3. 產生顯示地圖的地區。從工具箱的Web表單中拖放image,設定ID為theMap
4. 在該頁的代碼中參照Listing 5中的代碼添加一個函數,產生新地圖並返回URL。
5. 將Listing 6中的代碼加到Page_Load函數中,產生新圖片,更新theMap的URL。測試該Web application。點擊Visual Studio.NET中的啟動按鈕,會顯示一幅全球地圖。
狀態維護
上個例子沒有提供與使用者互動的工具。當添加了工具後,Web application的狀態維護就是一個問題。例如,添加縮放工具改變地圖的範圍,就要求代碼“記住”當前的範圍,在實現下一步的縮放的時候使用。有幾種方法來維護地圖的狀態,包括hidden inputs、cookies、session變數和ViewState。
ViewState記錄HTML返回用戶端的狀態資訊,那麼伺服器就不用象使用session變數那樣消耗資源來維護每一個Web用戶端的狀態。
使用BlueViewer
BlueViewer是ArcIMS安裝光碟片中內建的一個例子,可讓我們更快入門.NET Link Web applications的開發。它構建了基本的功能:固定或動態縮放,如縮放到矩形框的範圍;圖例;大/小圖切換,重新放置到中心;列印和顯示x,y座標。BlueViewer使用hidden inputs來儲存狀態資訊。
更多資訊
請參考線上的www.esri.com/arcims和Customizing ArcIMS—Using .NET Link上的ArcIMS 9 Architecture and Functionality白皮書。ArcIMS ESRI Software Documentation Library也收錄了這篇文章。