Sqlview靜態宣布地圖圖層的辦法。本站提示廣大學習愛好者:(Sqlview靜態宣布地圖圖層的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Sqlview靜態宣布地圖圖層的辦法正文
1.SQL Views簡介
Geoserver+postgresql+openlayers(leaflet)是今朝主流的gis開辟對象。Postgresql用於存儲地圖數據,geoserver用於宣布地圖數據,openlayers或許leaflet用於拜訪宣布地圖。正常情形下當shapefile格局的數據導入postgresql數據庫中以後,我們須要經由過程geoserver把一切的數據宣布出去,如許能力拜訪。慣例情形下這類操作方法是沒有成績的,由於地圖作為基本辦事,一旦宣布出去是不會變更的。然則關於室邊疆圖來講就不可了,假設一個商場有5層,每樓層又層有5個地圖圖層,關於如許一個商場須要把這25個地圖圖層在geoserver中全體宣布出來能力拜訪該商場的全體地圖。假設宣布這一個商場的25個圖層你還能忍耐的話,那宣布不計其數個商場的地圖你還能忍耐嗎?既然忍耐不了那就要想方法處理。因為宣布地圖是機械的反復的任務,我們能否能想一些方法來幫我們完成這些任務呢。這時候候就是我們的sqlView進場了。
起首引見一下sql View,經由過程SQLViews可以做以下工作:
(1)數據庫view可以在geoserver中看成表完整一樣的宣布,而geoserver的SQLViews不只能完成簡略的查詢宣布,還能輸出參數作為查詢視圖的前提。
(2)SQLViews可以宣布數據庫的存儲進程或許function,履行加倍龐雜的邏輯操作與查詢。
(3)SQL Views查詢可以經由過程字符串調換的方法停止參數化,參數值可以在wms和wfs要求總應用,輸出值可以經由過程設置的正則表達式停止驗證從而清除SQL 注入進擊的風險。
(4)SQLViews是對數據庫操作與查詢的一個成果,不克不及應用wfs_t去操作它,然則wfs,wms都可以正常要求或許查詢。
2.創立帶查詢前提的SQL Views視圖:
(1)登錄geoserver,點擊圖層,選擇任務空間,新建圖層。
(2)新建SQL Views視圖圖層,並宣布。
這裡創立了一個視圖,宣布傳入的表名數據。
tbl的默許值設置為數據庫中一向會存在的表格,設置的正則表達式為只許可輸出字母數字和下劃線。
在屬性值對輸入成果的類型和坐標系做了設置。
(3)圖層拜訪
在經由過程wms獲得地圖的時刻只須要把tbl的值經由過程viewparams傳遞曩昔就好了
http://10.20.135.14/geoserver/parking/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=parking%3AvTingchewei&CRS=EPSG%3A4326&STYLES=&WIDTH=2700&HEIGHT=1200&BBOX=20.02708134918213%2C110.33805803565978%2C20.03351865081787%2C110.3525419643402&viewparams=tbl%3Awanghaiguojia_b2_tingchewei
viewparams格局普通是viewparams=p1:v1;p2:v2;…可以加若干個參數。分歧參數之間以;離隔,單個參數是鍵值對,即p1是參數稱號,v1是參數值。
經由過程wms方法拜訪宣布的視圖辦法為:
var params = { LAYERS:'parking:vTingchewei', FORMAT:'image/png' }; varviewparams = [ 'tbl:wanghaiguojia_b2_tingchewei' ]; params.viewparams= viewparams; varvTingchewei = new ol.layer.Image({ source:new ol.source.ImageWMS({ url:'http://10.20.135.14/geoserver/parking/wms', params:params, serverType:'geoserver', }) });
經由過程這類方法,再多的商場只須要在geoserver中宣布5次視圖便可,並且該宣布視圖的代碼可以事後寫入geoserver中打包出來。如許該體系在任何商場應用都不須要宣布地圖了。
3.創立包括function的SQL View視圖
處理了圖層宣布的成績,終究可以松一口吻了。然則,沒想到辣手的成績還在前面。引導讓做室內導航功效。做就做吧,誰讓咱是苦逼的碼農呢。那該怎樣做室內導航呢,做這個功效之前,咱照樣要計劃一下的。起首要寫最短途徑查詢算法;然後查詢途徑的時刻只須要把終點和起點的地位輸出算法查詢便可;最初把查詢的成果經由過程wms或wfs方法獲得,顯示在地圖上。
編寫最短途徑計劃算法的時刻我們須要的輸出有:用戶地點樓層的途徑名,終點和起點的地位,然後我們吭哧吭哧,年夜戰3天三夜,弄定。
接著查詢,好辦,直接依照下面的放吧,把該商場的5個樓層都宣布一個基於對應樓層的成果途徑視圖,機靈吧?NO,NO,NO!的確遇工作不懂頭腦啊。這個時刻確定須要換一個新的辦法,把最短途徑計劃算法寫成一個Function嵌入到postgresql數據庫中,該function的輸出參數為:用戶地點樓層,終點地位,起點地位;輸入參數為終點和起點直接經由的點坐標。
最初,經由過程wms或許wfs的方法獲得獲得的最短途徑成果便可。
以上所述完成小編給年夜家引見的Sqlview靜態宣布地圖圖層的辦法,願望對年夜家有所贊助!