?MapGuide由四個獨立的組件(Component)構成,它們分別是:MapGuide Server MapGuide Web Extensions MapGuide Studio MapGuide Viewer

??? MapGuide Studio和MapGuide Viewer是MapGuide Server的客戶端,來自客戶端請求使用HTTP協議發送到Web Extentions,Web Extensions的WebAgent組件對這些請求進行處理最后發送到MapGuide Server。當MapGuide Server接收到一個請求,它會訪問存儲在資源庫中資源,以圖像或DWF格式創建和渲染地圖,最后將地圖返回到MapGuide Viewer。MapGuide View用于在屏幕上顯示地圖、管理圖層和要素的屬性數據。對于DWF Viewer,返回DWF格式的地圖;對于AJAX Viewer,返回圖像格式的地圖。MapGuide Studio包含了一個內建的DWF Viewer。
1. MapGuide Server
??? MapGuide Server用來管理連接(Connection)、線程池(Thread Pools)、日志,提供各種類型的服務(Service),響應客戶端的服務請求。
??? 運行于Web應用程序服務器上的程序通過MapGuide Service API訪問MapGuide Server提供的服務。MapGuide Service API使用了MapGuide服務TCP/IP協議與MapGuide進行通訊。MapGuide服務TCP/IP協議是一個簡單的二進制傳輸協議,它會將連接和操作請求進行編碼發送到MapGuide服務器,并且將MapGuide服務器的響應結果進行解碼返回給調用者。
??? MapGuide Service API對于MapGuide二次開發人員來說是透明的,如果你不打算研究MapGuide的源代碼,那么無需了解MapGuide Service API。

1.1?站點(Site)和服務器(Server)
??? 為了解決負載平衡的問題,MapGuide引入了站點(Site)的概念,站點是用來處理MapGuide的服務請求的一系列服務器的集合。用戶可以將MapGuide的服務部署到站點內的多個服務器上,這些服務器共享一個獨立的資源庫(Resource Repository)。資源庫存儲著要素源(Feature Source)、地圖(Map)、圖層(Layer)等資源。
??? 在下圖中,站點有兩臺服務器組成,其中一臺用來作為站點服務器。站點服務器上部署著資源庫,并且連接到站點內的其他服務器和數據庫服務器。

???? MapGuide Server提供了七種服務:站點服務(Site Service)、資源服務(Resource)、制圖服務(Drawing)、要素服務(Feature Service)、地圖服務(Drawing Service)、渲染服務(Rendering Service)和分塊服務(Tile Service)。如果你使用的是單機服務器,所有的服務都運行在這一臺服務器上。站點服務和資源服務只能運行在站點服務器上,因為站點服務器負責數據的訪問和管理站點內的所有資源。如果你有兩臺或更多的服務器,你可以將除站點服務和資源服務外的任意服務部署到其他服務器上。例如,地圖服務和渲染服務是最耗時的操作,我們可以將這兩種服務部署到一臺獨立的服務器,從而提高系統的性能。
??? 在安裝Web Extensions時,會同時安裝一個站點管理程序(Site Administrator Program),通過它你可以管理站點和服務器。這是一個Web界面的應用程序,用戶可以通過瀏覽器來使用它。打開瀏覽器,在地址欄中輸入http://servername/mapguide/mapadmin/login.php,你就可以啟動這個程序。其中,“servername”代表安裝Web Extensions的服務器的IP地址或名稱。
??? 登錄站點管理程序,你可以
管理站點。例如:增加、刪除服務器,將服務器置為離線(Offline)以進行維護。 分派服務到不同的服務器。例如:一臺服務器可以處理地圖服務,另一臺處理渲染服務。 監測任何服務器的狀態。 定義用戶和組,管理他們的權限。

1.2?資源庫(Resource Repository)
??? 資源庫是一個基于Berkeley DB XML的XML數據庫,用于管理層次結構的資源。一個站點內只能有一個資源庫,并且必須駐留在站點服務器。
??? 在MapGuide中,資源是設計來共享和重用的。資源庫中包含兩種類型的節點:資源文件夾節點和資源文檔節點。資源文件夾代表一個可以包含資源文檔和其它資源文件夾的容器,資源文檔用來存儲一個文檔。每種類型的資源節點都有一個唯一的ID、名稱、路徑和相關的訪問權限,我們可以通過資源的ID或路徑加文件名訪問任意一個資源節點。用戶對每個資源節點的訪問權限是由它的訪問權限決定的,子節點總是繼承父節點的訪問權限,子節點可以通過覆蓋父節點訪問權限改變對自己的訪問權限。
??? 一個資源可以引用另一個資源。例如:地圖、圖層、要素源(Feature Source)被存儲為三種不同的資源,地圖引用了地圖內的所有圖層,圖層引用了要素源。當原始的要素源更新后,圖層也會自動更新。一般情況下,一個資源通過ID來引用另一個資源。這樣的話,即使資源被移動或重命名,也無需進行任何修改。
??? 一個資源也可以是獨立的,不引用任何其他資源。例如:打印布局(Print Layerout)。資源庫支持如下類型的資源:
Web布局(Web Layerout) 打印布局(Print Layerout) 地圖(Map) 圖層(Layer) 符號庫(Symbol Libary) 制圖源(Drawing Source) 要素源(Feature Source): 過程(Procedure) 文件夾(Folder)
??? 每個資源還可以擁有自己的資源數據(Resource Data),資源數據可以存儲為文件、流和字符串。

2.?MapGuide Web Extensions
??? MapGuide Web Extensions是一個可以通過Web Extensions API訪問的內部組件,它暴露了MapGuide Server提供給客戶端的服務。Web Extensions也是一個應用程序開發平臺,開發人員可以調用Web Extensions API開發Web應用程序。目前,Web Extensions API支持PHP、ASP和JSP三種語言。
??? WebAgent用來處理來自MapGuide Studio或MapGudie Viewer的請求,將其傳輸給MapGuide Server。WebAgent實現了MapGuide服務HTTP協議,用于將請求轉發給服務器。WebAgent處理傳入請求的參數,建立與服務器的連接,調用相應服務的API。在得到API的響應后,將API返回的數據以流的方式返回給客戶端。
??? OpenGIS Agent實現了多個OpenGIS Web地圖協議,使用戶可以通過標準OpenGIS客戶端的訪問MapGuide提供的服務。作為Web服務的空間數據服務規范,只要某一個GIS軟件支持這些OpenGIS Web地圖協議,其他GIS軟件就可以通過這些地圖協議定義的接口得到所需要的數據。目前,OpenGIS Web Agent完成了如下協議:
Web地圖服務(Web Map Service):Web地圖服務提供了一個簡單的HTTP接口,從地理空間數據庫中返回圖層級的地圖影像數據。這個規范定義了三個操作:GetCapabitities返回服務級元數據,它是對服務信息內容和要求參數的一種描述;GetMap返回一個地圖影像,其地理空間參考和大小參數是明確定義了的;GetFeatureInfo(可選)返回顯示在地圖上的某些特殊要素的信息。
Web要素服務(Web Feature Service):Web要素服務地圖服務提供了一個簡單的HTTP接口,從地理空間數據庫中返回是要素的GML編碼,并提供對要素的增加、修改、刪除等事務操作。Web要素服務允許客戶端從多個Web要素服務中取得使用地理標記語言(GML)編碼的地理空間數據,定義了五個操作:GetCapabilites返回Web要素服務性能描述文檔(用XML描述);DescribeFeatureType返回描述可以提供服務的任何要素結構的XML文檔;GetFeature為一個獲取要素實例的請求提供服務;Transaction為事務請求提供服務;LockFeature處理在一個事務期間對一個或多個要素類型實例上鎖的請求。
Web覆蓋服務(Web Coverage Service):Web覆蓋服務定義了一個簡單的接口和一些操作,用于訪問地理空間“覆蓋”(Coverage)數據。Web覆蓋服務由三種操作組成:GetCapabilities,GetCoverage和DescribeCoverageType。GetCapabilities操作返回描述服務和數據集的XML文檔。GetCoverage操作是在GetCapabilities確定什么樣的查詢可以執行、什么樣的數據能夠獲取之后執行的,它使用通用的覆蓋格式返回地理位置的值或屬性。DescribeCoverageType操作允許客戶端請求由具體的WCS服務器提供的任一覆蓋層的完全描述。
注:覆蓋是將閉合區域區內的位置關聯于一些屬性值的要素。“網絡覆蓋”(Grid Coverages)一般指衛星影像、航拍影像、遙感圖像、數字高程數據等數據,每個像素代表或關聯于一個屬性值。
??? 從技術實現的角度,可以將Web服務理解為一個應用程序,它向外界暴露出一個能通過Web進行調用的接口,允許被任何平臺、任何系統,用任何語言編寫的程序調用。這個應用程序可以用現有的各種編程語言實現。Web服務最大的特點是可以實現跨平臺、跨語言、跨硬件的互操作。

3. MapGuide Viewer
??? MapGuide Viewer提供了一種途徑讓用戶可以在Web瀏覽器中瀏覽地圖。目前,最新版本的MapGuide有三種風格的View:
DWF Viewer:這種類型的Viewer只能工作在Windows平臺的IE瀏覽器,需要用戶下載和安裝一個ActiveX控件以支持顯示DWF格式的數據。
AJAX Viewer: 這是一個零客戶端Viewer,用戶無需下載或安裝任何軟件。它能夠工作在Windows平臺Microsoft Internet Explorer和MacOS或Linux的Firefox上。
基于Fusion的AJAX Viewer:這種Viewer極大地提高了AJAX Viewer從功能和界面方面進行定制的能力。
3.1?DWF Viewer
??? MapGuide DWF Viewer是基于DWF和Autodesk DWF Viewer (ADV)的。DWF (Design Web Formt) 是Autodesk公司開發的、用戶共享工程設計數據的、一種開放、安全的文件格式。DWF文件是一個壓縮文件,一般非常小,所以非常易于傳輸和查看。Autodesk DWF Viewer是用于瀏覽DWF格式文件的一個工具,它只支持標準的包含二維EPlot文檔和三維EModel文檔的DWF文件。
??? 非常遺憾的是Autodesk Design Review 2010不再包含MapGuide DWF Viewer所使用的組件, Autodesk不再支持和維護DWF Viewer,所以MapGuide 2010及其后的版本不再支持DWF Viewer。對于那些仍然依賴于DWF Viewer的MapGuide應用程序,可以通過安裝Autodesk Design Review 2009繼續使用它們。
??? MapGuide DWF Viewer的架構如下圖所示:

??? Map文檔是MapGuide對現有DWF文件格式的一種擴展,定義了地圖的名稱、坐標系、范圍、地圖圖層列表、地圖圖層分組和一系列應用程序擴展。一個DWF文件可以包含多個EMap文檔。
??? EMap View是對現有Autodesk DWF Viewer的擴展,用來支持顯示EMap文檔。EMap View可以枚舉DWF文件中的所有EMap文檔、顯示當前的EMap文檔、枚舉EMap文檔中的所有圖層、改變每個圖層的可見性(Visibility)。同樣,EMap Viewer可以利用Autodesk DWF Viewer已有的功能縮放、選擇地圖上的要素。EMap Viewer使用了如下三種用戶界面組件:
地圖導航控件(Map Navigation Control):用于選擇DWF文件中當前顯示的EMap,與地圖圖例(Map Legend)交互、執行預定的查詢等。
地圖控件(Map Control):用于瀏覽地圖,按照當前比例尺顯示或隱藏圖層,計算標注的位置等。
屬性瀏覽控件(Property Browsers Control):用戶顯示關聯到地圖、圖層、要素的屬性信息。這個控件是標準Autodesk DWF Viewer的一部分。
??? MapGuide Viewer API適配器(Adapter)暴露了MapGuide 6.x API,提供了一種將以前版本的MapGuide應用程序升級到新版本的解決方案。
3.2?AJAX Viewer
??? DWF Viewer有不錯的性能,因為DWF是一種向量格式的文件,在平移和縮放地圖的時候無需向服務器重新發送請求。但是,DWF Viewer只能工作在Windows平臺,這非常大地限制了MapGuide的應用。在MapGuide 6.5之后,MapGuide引入了AJAX Viewer來解決這個問題,使MapGuide可以工作在Linux平臺。
??? 使用AJAX Viewer時,地圖總是被渲染為圖像傳送到AJAX Viewer。每次平移或縮放地圖,AJAX Viewer會向服務器發送請求,要求重新渲染地圖,所以性能要比DWF Viewer差一點。
3.3?基于Fusion的Viewer
??? Fusion框架是一個靈活的、可擴展的模版系統,它可以將應用程序的界面和功能模塊分割開來。在最簡單的情況下,一個Fusion應用程序模版(Fusion Application Template)由一個HTML頁面組成。通過將Javescript腳本庫fusion.js加載HTML頁面中,在onload事件中初始化Fusion對象,就可以創建一個Fusion應用程序。Fusion使用了一個專有的XML文檔來決定在頁面中創建哪些功能模塊,MapGuide中這個XML文件作為一個ApplicationDefinition資源存儲在MapGuide資源庫中。
??? 我們將Fusion應用程序的每個功能片稱之為Widgets,一個Widget包含一種獨立的功能。通常情況下,Widget是自包容的,不依賴于任何其他的Widget。但實際中,如果沒有其他的Widget,有一些Widget是毫無意義的。一個Widget通常包含了一些用戶界面,例如按鈕或圖例(Legend)。Widget的顯示位置是由應用程序模版中的HTML id屬性來控制的,但并不受限于Fusion框架。Widget是設計的用于顯示在HTML頁面中的,它會根據容器的大小自動縮放。同時,Widget也設計為可配置的(Configurable),通過修改ApplicationDefinition可以訂制Widget的功能。通過覆蓋某些CSS類,也可以改變Widget的外觀。
??? Fusion框架使用了Jx庫來簡化支持不同瀏覽器的問題。Jx是一個獨立的Javascript庫,最開始是開發用來支持WebStudio的。當定制一個應用程序的外觀時,開發人員通常是定制Jx模塊,而不是Widget自身。例如:將所有按鈕Widget外觀效仿Window XP樣式,開發人員實際上會提供一個CSS文件覆蓋Jx默認的CSS文件。通常來說,Fusion Widget不包含自己的CSS或可視樣式(Visual Style)。
??? 盡管Fusion由Javascript編寫而成,但是它有一種機制可以異步地調用服務器腳本。這樣可以大大提升MapGuide Web Extensions API的能力,從而提供更多高級的功能。Fusion的架構是設計的可以支持任何服務器端腳本語言,但是現在只實現了對PHP的支持。
??? Fusion的引入是為了解決MapGuide原有的AJAX Viewer在功能和界面方面難于定制的問題。MapGuide創建了一系列widget來復制原有AJAX Viewer的功能,并且開發了幾個基本的應用程序模版作為開發新的應用程序的基礎。
4.?MapGuide Studio
??? MapGuide Studio是一個用來制作收集、準備地理空間數據和制作地圖的工具。它只能運行在Windows平臺,MapGuide開源版提供了一個免費的預覽版Studio,這個版本沒有經過嚴格的測試。MapGuide企業版提供了一個經過嚴格測試的完全版Studio,不過它是需要付費的。當你使用MapGuide Studio的時候,一般會遵循如下的幾個步驟:
為地理空間數據在資源庫中創建相應的資源。你既可以直接加載文件類型的數據,也可以連接到一個外部的數據庫。
創建圖層(Layer)。
編輯地圖(Map),將所需的圖層加入地圖。
將地圖嵌入一個Web Layout中。
??? 在有了一個Web Layout后,你就可以通過添加自己的代碼定制Web應用程序的界面和功能。最后一步就是將完成的Web應用程序發布到Internet或Intranet供用戶瀏覽和交互。
??? MapGuide Studio接口分為了三個部分:
??? 當打開MapGuid Studio連接到站點服務器,站點管理器會顯示存儲在資源庫中的所有資源。雙擊站點管理器中的任何一個資源,對應的編輯器會打開,用戶可以修改資源的信息。如果資源是圖層或地圖,Viewer會打開并顯示數據的預覽。

?
“即使資源被移動或重命名,也無需進行任何修改” 資源之間的dependency沒有強制關聯,比如LayerDefinition 引用了 FeatureSource,但是如果移動或者重命名這個FeatureSource,在LayerDefinition中引用的地址不會自動更新的,從而引用關系丟失。在2011中有計劃加入一個參數,使得移動或者重命名時能夠保持關系。不過從本質上來講,MapGuide的資源沒有像RDBMS那樣具有“外鍵”約束。一點小問題: MapGuide Server提供了七種服務:站點服務(Site Service)、資源服務(Resource)、制圖服務(Drawing)、要素服務(Feature Service)、地圖服務(Drawing Service)、渲染服務(Rendering Service)和分塊服務(Tile Service)。 Drawing Service ----繪圖服務/制圖服務 Mapping Service ----地圖服務