WMTS服務解析
1、基本思路
拼接地址,請求xml文件
↓
處理獲取的xml文件,返回參數
↓
獲取xml解析得到的參數,組織結構
2、對應函數
requestWMTS (olUrl)
↓
handleWMTS(xml,fullName)
↓
getWMTSparam(curRecord)
3、操作步驟
①點擊【添加服務】
②輸入名稱、鏈接、類型
③點擊【確定】(解析保存)
4、解析須知
(1)拼接地址結構
添加服務地址:http://你的Geoserver網址/gwc/service/wmts/rest/csdn:CSDNDOM/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png
結構:
Geoserver地址/gwc/service/wmts/rest/切片名/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png
拼接地址結構:
geoserverUrl + "/gwc/service/wmts?service=WMTS&version=1.0.0&request=GetCapabilities"
geoserverUrl即為geoserver服務地址;
service = WMTS即為wmts服務;
version=1.0.0即為geoserver版本,這個可以向下兼容;
request=GetCapability即為獲取wmts全部信息;
(2)xml節點中冒號:問題
基本解決思路為:
將xml轉為字符串,將:替換為規定符號(我用的C,后來直接將ows:替換為ows),再將string轉為xml便於解析;
還有一種思路為:將xml轉為字符串,使用正則表達式遍歷,得到結果;
法一:缺點為若正巧出現關於C的特殊情況(后來直接將ows:替換為ows),需注意,且不建議使用特殊符號,建議使用大寫字母。
法二:若熟練使用正則表達式還是建議使用正則表達式,更適合處理一些突發情況,但xml文件中內容很多,可能耗費時間。
(3)關於wmts參數
存儲參數結構
加載需要參數結構
Wmts的xml文件鏈接:http://你的geoserver/gwc/service/wmts?service=WMTS&version=1.0.0&request=GetCapabilities
參數注:
Format一般為image/png,但也可能為image/jpeg等,但不影響加載;
Projection的units即為單位一般為度,這個要讓他們發布服務時注意;
tilegrid中的extent和origin均用世界的,由於geoserver中openlayers的例子中是用的世界范圍,我也用的世界范圍,若有天需要范圍可在xml文件中中拿到,然后計算中心即可;
tilegrid中的resolution與matrixIds是對應的,且xml文件中只能拿到matrixIds,拿不到resolution,我是將代碼中寫入了22級resolution,來與matrixIds對應,一般沒問題,但他的級別是有30級的,若果真用到了就再把剩下的8級給加上。
5、鏈接獲取
【添加服務】中鏈接的來源:
①geoserver發布wmts服務
②使用拼接地址拿到xml文件,用wmts名稱查找到Layer位置,然后去拿圖中地址
如圖:
注意是第一個鏈接地址。
6、代碼細節
其實在代碼中完全可以看懂,略顯繁瑣,可以不看。
①hadleWMTS的maxtrixSet參數即為切片方案的名稱,解析過程為拿到中的,之后去找下的對應的內容(即為切片方案名)進行比對,再在上層,拿到對應的級別的chidlren放在數組中。
②在現有的geoserver版本下,默認的matrixIds級別模板為crs:1,利用這點,利用split方法拿到坐標系code;百度后發現,大概在geoserver2.0后版本默認的級別模板有所不同。
③加載wmts需要的參數,最終組織在名為source的json對象中;像之前的【添加服務】功能是需要獲取中心Center和范圍Extent的,至於這點代碼我也寫了,若后期需要請自行取用(需要刪改),其中為了不進行彈窗配置,在數據庫的remark字段中,將其全部作為raster處理。
④獲取的wmts的xml文件中有的對應兩個切片方案,這個應該是該圖層未進行切片處理,也可能是geoserver中設置對應了兩個切片方案(應該不是),這點有待考證。
⑤還有一個點是,我只將解析的source,return了出來,至於formvalue我不知數據庫中將如何組織,便未將名稱鏈接等組織在內,其余暫時已無需要注意的點。
注:WMS服務解析類似,掌握WMTS服務解析,極易掌握WMS解析。
掃碼關注公眾號