1. 程式人生 > >基於geoserver的REST服務完成mysql資料來源動態釋出

基於geoserver的REST服務完成mysql資料來源動態釋出

1. 背景

     目前有兩種方案來實現,一種是利用已封裝好的geoserverManager.jar來開發,另一種就是直接基於geoserver的Rest服務來開發。這裡,我們主要對如何使用geoserver的Rest服務完成開發來進行描述。

2.  RestAPI

 

       我所列出的workspaces、datastores、featuretypes、layers、styles是服務釋出中均會涉獵的型別。我們利用workspaces來建立工作空間,利用datasotores來建立資料來源,利用featuretypes來將資料來源中具體資料建立為要素型別,利用styles來建立樣式,利用layer來將資料型別與樣式進行關聯。

       以datastores為例,點選該連結可進入其支援的所有API請求:

 

       其中包含了資料來源的增、刪、改、查等。其他模組類似。

3.   實現

3.1   DataStores

       該操作包含判斷DataStores是否存在,以及建立。

3.1.1判斷是否存在

       依賴 gisBaseLayer.getServiceUrl()+"/rest/workspaces/cite/datastores.json"請求可獲取到所有dataStores描述,進而判斷指定的DataStores是否存在。

3.1.2建立

       再依據構造建立dataStores的XML,傳送Rest請求完成建立,這裡以mysql資料來源為例:

 

       其中,傳送請求時,一定要設定其許可權認證:

 

       請求方式為POST。

3.2   FeatureTypes

       當dataStores建立成功後,需將其中的資料釋出為要素型別服務。這裡主要包含存在判斷、刪除操作、建立操作。

3.2.1判斷是否存在

       通過傳送:gisBaseLayer.getServiceUrl()+"/rest/workspaces/cite/datastores/"+storeName+"/featuretypes.json",可以獲取到指定的stores下的所有featuretype,  通過遍歷可判斷指定的featuretype是否存在。

3.2.2刪除

       以DELETE請求型別,傳送:

       gisBaseLayer.getServiceUrl()+"/rest/workspaces/urbanlayer/datastores/"+storeName+"/featuretypes/"+featureTypeName+"?recurse=true"

       請求,便可刪除指定的featuretype。

3.2.3 建立

       獲取到要素的幾何範圍、座標系等,便可以構造XML:

 

       請求方式為POST。

3.3Styles

3.3.1判斷是否存在

       通過傳送:gisBaseLayer.getServiceUrl()+"/rest/styles.json",可以獲得所有style,通過遍歷可判斷指定的style是否存在。

3.3.2刪除

       以DELETE請求方式,傳送:

gisBaseLayer.getServiceUrl()+"/rest/styles/"+styleName+"?purge=ture&recurse=true"

       便可刪除指定的style。

3.3.3建立

       Geoserver中的樣式內容均為SLD格式,這裡建立樣式服務有多種方式,這裡以style.sld和style.xml一同建立為例:

 

       紅框中分別為樣式名稱,以及建立Style時傳入的資料格式。

       請求方式為POST請求。

3.4Layers

3.4.1修改

       該功能主要目的是修改layer與style的關聯:

 

       請求方式為PUT。

4. 功能設計

       a.開發資料來源選擇框,提供業務庫中待發布資料選擇、幾何欄位選擇、資料條件過濾等。

       b.開發樣式配置模板,提供填充色、邊框、圖示等配置。

       c.開發地理伺服器選擇框,提供選擇釋出至某個geoserver。

       d.一鍵釋出。

       e.元資料獲取,服務託管。

                                                                           如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^