轉載:https://ethanblog.com/tech/all-about-wms-wfs-and-wcs.htmlhtml
前面幾節介紹了GeoServer基礎教程的一些基本操做,相信你們對GeoServer的基本操做都比較熟悉了。咱們知道GeoServer使用開放地理空間聯盟(OGC)提出的開放標準,支持三種空間數據互操做的接口規範WMS、WFS和WCS,這一節咱們就來介紹這三種規範,爲之後使用這些規範開發基於GeoServer的Web應用打下基礎。服務器
首先簡單介紹一下OGC(Open Geospatial Consortium,開放地理信息協會)和Web Services以及他們之間的關係。網絡
OGC是一個非贏利的國際化標準制定組織,領導進行對地理數據相關的操做和服務標準的制定。OGC最主要的一項計劃是互操做計劃(Interoperability Program,簡稱IP),該項目的目標是提供一套綜合的開放接口規範,以使軟件開發商能夠根據這些規範來編寫互操做組件,從而知足互操做需求。數據結構
Web Services即Web服務,它是自包含的、模塊化的應用程序,它能夠在網絡中被描述、發佈、查找以及調用。Web服務的一個主要思想,就是將來的應用將由一組應用了網絡的服務組合而成。在Web Services體系中,全部東西都是服務,這些服務發佈一個API供網絡中的其餘服務或者應用使用,而且封裝了實現細節。Web Services是OGC規範以及創建面向服務的空間共享體系的基礎技術體系。空間信息Web服務是在Web服務技術和標準基礎之上實現的地理空間信息網上在線服務。它利用Web服務技術提供的公共接口、交換協議和服務規範,提供應用客戶管理、註冊服務、編碼、處理服務、描述服務和數據服務等。主要的應用客戶包括髮現客戶、地圖瀏覽客戶、影像利用客戶等。空間信息Web服務除了採用基本的Web服務技術協議外,還須要相關地理空間信息及處理的技術協議,目前主要有OGC、ISO/TC211和W3C等組織在進行相關協議標準的制定。 OGC Web服務(OWS)便是典型的空間信息Web服務標準體系。分佈式
OGC Web服務公共執行規範詳細描述了OWS接口執行規範包含的公共方面:模塊化
這些規範目前包括網絡地圖執行規範(WMS)、網絡特徵數據執行規範(WFS)、網絡覆蓋執行規範(WCS)。下面逐一爲你們介紹。學習
Web地圖服務(WMS)利用具備地理空間位置信息的數據製做地圖。在WMS規範中將地圖定義爲地理數據可視的表現,WMS返回的不是地圖數據,而是地圖圖象。編碼
WMS規範定義了三個操做:spa
該操做的目的在於獲取服務元數據,元數據是對服務器信息內容和可接受的請求參數值的一種機器可讀性(而且能夠人讀)描述。翻譯
GetCapabilities操做的參數詳解:
FORMAT:該可選參數規定服務元數據的格式要求。WMS服務器上GetCapabilities請求支持的值由服務元數據中的一個或多個<Request><GetCapabilities><Format>元素列出.。若是請求描述的格式不被服務器支持,服務器應該返回默認的text/xml格式。
VERSION:肯定請求服務的版本。
SERVICE:該強制性參數指示哪一個可用的服務類型將被激活,在WMS上當激活一個GetCapabilities時,值」WMS」就應該被使用。
REQUEST:要激活GetCapabilities操做,值」GetCapabilities」就應該被用到。
UPDATESEQUENCE:該可選參數是爲維持緩衝區一致而設置的,它的值能夠爲一個表明一個符合ISO 8601:2004格式(原文附錄D)的時間標籤(timestamp)的integer、string或者其餘string。服務器可能包含一個UpdateSequence值於服務元數據中,若是這樣,當Capablities被改變(e.g.當新的maps添加到給服務中)的時候,這個值應該被增長。客戶端可能在其GetCapabilities請求中包含該參數。
GetMap操做返回一幅地圖(map),接收到GetMap請求後,WMS要麼知足請求要麼發送一個異常。
GetMap請求的參數詳解:
LAYERS:該參數值是一個逗號分隔的列表,列表元素爲有效圖層名稱。這些名字應該是在服務元數據中的<Layer><Name>元素中已經定義過的字符內容。WMS在繪製map的時候,應該將該列表最左邊的層放到層棧的最底部,下一個放在前一個的上面,依此類推。其中可選的<LayerLimit>元素在服務元數據中爲一個正數。代表了客戶端在一次GetMap請求中容許請求的最大圖層數。若是忽略了該元素,則服務器沒有該限制。
STYLES:以逗號分隔的列表形式表示的請求的每一圖層的STYLE。STYLE值應該有效,而且STYLE值與LAYERS參數值老是一一對應的。因此,每一個map都是按照LAYERS的STYLE繪製各個layer,而各個Layer的名稱必須符合默認的混合形式,則在STYLE參數中應該用逗號來分隔一個空值(如」STYLE=style1,style2」),若是服務器爲一個layer發佈多個Style,而客戶端發送了一個默認style的請求,選擇哪一個style做爲默認值就是服務器的標準了。元數據中styles的順序並不能代表哪一個爲默認的值。客戶端開發人員應該最大限度地減小用戶不注意地請求或無心識地得到扭曲的地圖。
CRS:CRS參數聲明瞭應用到BBOX請求參數的層CRS。該參數的值必須爲所請求的服務器元數據中已經定義過或從請求層中繼承過的.。WMS沒必要支持全部的CRS,可是,對於其已經在服務元數據發佈的CRS應該支持。若是客戶請求其不支持的CRS,服務器應該返回一個異常(code=」InvalidCRS」) 。若是WMS服務已經聲明瞭一個層的CRS=CRS:1,如前所述,表示該層沒有定義好一個座標參考系統,所以不能與其餘層聯合顯示。客戶端應該在GetMap中指定CRS=CRS:1,不然,服務器可能發送一個服務異常。當CRS在 請求中使用時,BBOX參數的單位應該爲像素。
BBOX:該參數容許客戶請求一個特定的Bounding Box。該參數的值爲逗號分隔的一串實數列表,形如:」minx,miny, maxx, maxy」,它們分部表明請求圖層CRS下的區域座標:最小x、最小y、最大x、最大y。其x、y軸的單位、方向、增量都在層CRS中定義。BoundingBox和map像素矩陣之間的關係是BoundingBox包圍在像素矩陣的外邊,而不是經過地圖周邊像素的中心,在該內容中,單個像素描述地面的一個區域。
FORMAT:該強制參數聲明瞭地圖的要求格式。WMS服務器支持的GetMap請求格式值在服務元數據中以<Request><GetMap><Format>形式列出。<Format>的整個MIME字符串值被用來表示FORMAT參數的值,而這個值沒有默認值。在HTTP環境下,MIME類型應該使用內容類型實體頭文件設置爲返回對象。若是請求指定了一個服務器不支持的格式,服務器應該發送一個服務異常(code = 」InvalidFormat」 )。
WIDTH、HEIGHT:該強制參數指定產生的地圖整數值大小,單位爲像素。Map CS適用於map,WIDTH-1指定了Map CS中x軸方向的最大值,而HEIGHT-1則爲y軸方向的最大值.。若是請求的格式爲picture,則返回的圖片將不考慮MIME類型,準確地爲指定的width和height像素值。在這種狀況下,若是BBOX的比率和width/height的比率不一致時,WMS將會拉伸返回的地圖以使得最終像素可以在BBOX比率下自動生成。換句話說,就是使得在一個輸出像素不是方形的,或者拉伸圖像區域到不一樣比率的設備上也可以使用該定義去請求一幅地圖。若是WIDTH/HEIGHT比率與X、Y以及像素尺寸的比率不一致,那麼就會發生圖像扭曲。
TRANSPARENT:該可選參數定義地圖背景是否透明,可取值:」TRUE」 和FALSE」,默認和參數缺省時取值:FALSE.。繪製透明像素地能力使得不一樣的地圖請求能夠被疊置生成一個複合地區。強烈推薦每一個WMS提供一種能夠提供透明圖層的格式以使得圖層能夠與其餘圖層疊置.。注意:image/gif格式具備透明性而且可讓一般客戶徹底顯式。image/png格式提供一個範圍內的意義的點,或實體將不能設成透明的,而客戶端可能仍然請求TRANSPARENT=TRUE當FORMAT參數包含一個圖形元素格式,TRANSPARENT參數可能在請求中出現,但其設置值將會被WMS忽略。
BGCOLOR:該可選參數爲一個字符串,用來指定地圖將要使用的背景色(無數據區)。BGCOLOR一般的格式爲一個RGB值的十六進制編碼,其中對於每一個顏色值red、green和blue使用兩個十六進制字符,因此該值的範圍爲00到FF(十進制的0和255)。其 格式爲oxRRGGBB,RRGGBB大小寫都是容許的。而」0x」必須爲小寫的」x」,若是該參數在請求中缺失,則默認的值爲oxFFFFFF(對應的值爲白色)。當FORMAT值爲圖像格式時,服務器應該設置背景像素值爲BGCOLOR值,當FORMAT的值爲圖形元素格式(它們沒有顯式的背景),或者圖像格式時,WMS應該避免爲前景元素使用BGCOLOR值,由於這樣在該背景顏色下,它們將不可見。當圖層已經肯定爲不透明」opaque」時,地圖上的重要點、實體將不顯式任何背景。
GetFeatureInfo是一個可選操做。它只支持可查詢屬性被定義或繼承爲「1」(真)的層。客戶端不得向其餘層發出GetFeatureInfo要求。若是一個WMS收到一個GetFeatureInfo請求,但不支持它,它會迴應一個格式正確的服務異常反應(XML代碼= OperationNotSupported)。
GetFeatureInfo操做設計的目的是爲一個WMS的客戶端提供更多返回地圖請求的地圖要素的信息。GetFeatureInfo典型用例,一個用戶看到一個地圖請求響應,在地圖上選擇一個點(I,j)來獲取更多信息。基本操做爲客戶端提供指定哪一個像元被訪問, 哪一個層應該進行調查,信息應該返回什麼樣格式的功能。由於WMS的協議是無狀態的, 對於WMS,GetFeatureInfo請求經過包括大部分原始GetMap請求參數(除了VERSION和REQUEST)代表用戶正預覽的是什麼地圖。從GetMap請求下的空間範圍信息((BBOX,,CRS,,WIDTH,,HEIGHT)來看,隨着用戶選擇的I、J點的變化,WMS返回關於位置的附加信息。
GetFeatureInfo的請求參數詳解:
QUERY_LAYERS:QUERY_LAYERS參數規定查詢的圖層。它的值是一個以逗號分隔的一個或多個圖層列表。此參數應至少包含1個圖層的名稱,但也能夠包含比原來的GetMap請求的層少。若是在QUERY_LAYERS中規定查詢的圖層沒有在WMS中的元數據中被定義,將返回<服務異常(code = LayerNotDefined)。
INFO_FORMAT:INFO_FORMAT參數表示返回的特徵信息時使用何種格式。WMS服務器支持的GetFeatureInfo請求格式值在服務元數據中以<Request><FeatureInfo><Format>形式列出。<Format>的整個MIME字符串值被用來表示INFO_FORMAT參數的值,而這個值沒有默認值。在HTTP環境下,MIME類型應該使用內容類型實體頭文件設置爲返回對象。若是請求指定了一個服務器不支持的格式,服務器應該發送一個服務異常(code = 」InvalidFormat」 )。
FEATURE_COUNT:FEATURE_COUNT參數規定在返回的每一個圖層中所容許包含的特徵數據量的最大值。
I,J:指示興趣點,這是根據地圖的CS定義,I和J是地圖座標系統中的一個座標,所以I的值應介於0與i軸的最大值,J值應介於0和第j軸的最大值,點I = 0,J = 0表示該像素在地圖的左上角,I向右增長而J向下增長。點(I,J)表示所指示的像素的中心。若是j或者I值無效,則服務器會發出一個服務異常(code = InvalidPoint)。
WFS是基於地理要素級別的數據共享和數據操做,WFS規範定義了若干基於地理要素(Feature)級別的數據操做接口,並以 HTTP 做爲分佈式計算平臺。經過 WFS服務,客戶端能夠獲得矢量數據格式描述的單個地理要素的空間數據或要素集的空間數據,並能夠對單個地理要素進行編輯、 刪除、 添加等數據操做。WFS採用 GML描述地理要素特徵, 根據用戶請求的內容返回 GML描述的空間數據。
OpenGIS的WFS實施規範爲下一步操做邏輯提供支持,提出了描述使用了分佈式計算平臺HTTP地理特徵數據處理操做界面。數據處理操做包括如下能力:
WFS規範定義了 6 個基本操做:
WCS面向空間影像數據,它將包含地理位置值的地理空間數據做爲「覆蓋物(COverage)「在網上相互交換。網絡覆蓋服務由三種操做組成:GetCapabilities,GetCoverage和DescribeCoverageType。
至此,空間數據互操做的接口規範WMS、WFS和WCS已經介紹完畢,這些都是一些理論的東西,你們能夠選擇粗略看看,也能夠更深刻地去學習和理解。固然,若是須要深刻學習和理解應用的,緊靠這一節的內容是遠遠不夠的。此外,考慮到WMS使用得最爲頻繁,我在本文中着重介紹了WMS服務的規範和請求參數,但願有所助益。
除了本文所介紹的三種協議外,GeoServer還支持TMS、WMS-C、WMTS等多個協議,此外,Web Processing Server(WPS)做爲新近推出的標準,也有了愈來愈普遍的使用,對於這些內容,最好的學習之處仍是OGC的官網(http://www.opengeospatial.org/),本文的大部份內容也是參考翻譯於此,感興趣的朋友能夠多多前往學習。