2010年1月18日 星期一

About WMS (Web Map Service)

前幾年一直覺得WMS一種普通的服務,說穿了就是用組合URL的參數去要一張地圖,而WMS伺服器就會用這些參數畫出一張圖給使用者。後來有機會用在Google Map上套疊使用wms圖層,效果很差。因為JavaScript會組合每張256X256 Tile的參數,不過Server往往來不及畫出所有的tiles,導致,地圖上出現一塊塊[x]的圖示。系統功能上都沒有問題,不過每次套疊WMS圖層,都會有一半的圖出不來,這樣的Web GIS算是不及格的,所以也沒有公開這樣的作品。從此就開始有點覺得WMS是個無用的服務,至少對我開發Web GIS是這樣的情形。

2008年年底時發現有人在玩WMS tile Caching的東西,小試了一下發現不得了,完全解決了WMS不夠即時繪圖的問題。於是2009就使用這樣的概念來實作系統及發表2篇文章。使用這樣的概念以解決了Web GIS常見的一些問題,有趣興的人可以找找我發表的文章。另外WMS Cache這樣好用的東西,也漸漸變成標準之一,詳細可以參考http://wiki.osgeo.org/wiki/WMS_Tile_Caching

最近有機會再回頭看一下OGC WMS,發現其實還蠻多功能的,只是沒有機會嘗試。就使用DM Solutions Group提供的WMS來說明吧。

首先http://www2.dmsolutions.ca/cgi-bin/mswms_gmap是提供服務的網址

加上SERVICE=WMS的參數,告訴Server我要你提供WMS的服務

REQUEST=GetCapabilities,則是尋問Server你有提供那些功能及服務

把網址及參數組合起來則是詢問Server你有提供WMS的那些功能及圖層服務。如下

http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?SERVICE=WMS&REQUEST=GetCapabilities

在QGIS中的設定如下圖,僅需給QGIS WMS URL網址,QGIS會自動將使用OGC WMS標準的方式詢問此Server有那些服務及功能,如同上面所解釋的。

WMS設定及密碼管控

如果此WMS服務需要輸入帳號及密碼,也可以在QGIS中設定。這意味著使用WMS的方發也可以使用帳號/密碼來管控所要提供的功能及圖層。有此需求的人可以在Server端加上帳號/密碼的認證功能,以提供更多元、個人化的服務。

2010-01-19_090657

樹狀結構的WMS圖層服務

在QGIS讀取DM Solutions Group的WMS服務後,畫面如下圖。我們可以發現此WMS提供影像輸出的功能有支援GIF、JPEG、PNG、TIFF;而座標系統有四個可用。最重要的圖層服務則可以使用樹狀結構來呈現,DM Solutions Group的例子就使用3層樹狀的架構來呈現。

2010-01-19_090641

如何作到以上樹狀的架構呢?直接看DM Solutions Group WMS提供及圖層服務的XML檔案,截圖如下。
紅色的框中是圖層名種及Layer Tags的位置,比較特別的是第三層為已套用樣式的圖層。若要設計分群的圖層,則可以使用OGC WMS標準內的Dimension Tag,來定義一個或多個圖層。若要整合多個WMS Server 則在Layer Tags中,可以使用cascaded屬性整合不同來源的WMS服務。

 

2010-01-19_095849

仔細看一下WMS XML 就可以知道其設計的方法,當然要懂一些HTML或XML語法會比較容易些。橘色的部分則是WMS Server所有供的座標轉換功能。若想更深入研究,可以參考http://www.opengeospatial.org/standards/wms 此網站。