GeoServer之SqlView
原文:http://www.cnblogs.com/hanhuibing/articles/5642703.html
Geoserver+postgresql+openlayers是目前主流的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都可以正常請求或者查詢。
建立簡單的SQL Views
這裡建立了一個檢視,從road表中只返回gid小於100的記錄。
一般可以將資料庫中主鍵比如gid設定為識別符號,返回的圖形要手動選擇型別和srid。其他釋出操作和其他的一模一樣。
建立帶查詢條件的SQL Views
定義引數化Views
這裡使用%%定義了兩個引數,一個是下限low,一個是上限high。該檢視用於傳入這兩個引數,查詢結果。
點選 ‘從sql中猜想引數’,自動彈出以上內容。可以在預設值中賦值,後面正規表示式用於驗證引數格式,防止sql注入,具體細節請學習正規表示式。任何不符 合表示式規定的引數,驗證都不會通過。(新手練習可以刪除正規表示式內容,為空即可。避免因為正則不通過,導致檢視使用不了)。釋出的其他操作見上文。
使用引數化Views
在正常的wms的getMap請求中或者wfs的getFeature請求的url中加入viewparams引數,用來向檢視傳遞引數值。上文中我們定義了兩個引數,即low和high,下面看如何在請求中將引數傳遞給伺服器。
正常getMap語句:
http://localhost:8090/geoserver/network/wms?service=WMS&version=1.1.0&request=GetMap&layers=network:road&styles=&bbox=1.31808014222456E7,3663612.77697468,1.32722445176114E7,3844254.1268673&width=259&height=512&srs=EPSG:3857&format='image.png'
可傳遞引數的getMap
http://localhost:8090/geoserver/network/wms?service=WMS&version=1.1.0&request=GetMap&layers=network:road&styles=&bbox=1.31808014222456E7,3663612.77697468,1.32722445176114E7,3844254.1268673&width=259
&format=’image.png’
&viewparams=low:200;high:400
`正常wfs的請求url後加上viewparmas即可。
viewparams格式一般是viewparams=p1:v1;p2:v2;…可以加若干個引數。不同引數之間以;隔開,單個引數是鍵值對,即p1是引數名稱,v1是引數值。
很明顯如’,’,’ ;’都是特殊符號,用來區分引數的,可是有人要問,要是我的引數值是字串,並且就有特殊符號怎麼辦?當然有辦法–轉義!轉義符號是’\’。
比如,v1值比如是’adsf;sdfjsdf’,那麼viewparams就要這麼寫viewparams=p1:’adsf\;sdfjsdf’,注意’,’,’:’都是特殊符號。
建立資料庫的Function檢視
在postgis中定義Function
CREATE OR REPLACE FUNCTION zj_showjgnsr(
IN p_idcode text,
OUT swglm text,
OUT geom geometry)
RETURNS SETOF record AS
$BODY$
DECLARE
sql text;
rec record;
the_geom geometry;
BEGIN
execute 'select geom from grid where idcode=$1' using p_idcode into the_geom;
for rec in execute 'select * from jgnsr where ST_Within(geom,$1)' using the_geom loop
swglm:=rec.swglm;
geom:=rec.geom;
return next;
end loop;
return;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT;
這個function接受一個引數,根據該引數從grid表中查詢出圖形,然後以該圖形為查詢條件,查詢這個jgnsr 表中與其相交的所有記錄,並返回出去。function一般處理比較複雜的邏輯和過程。
釋出Function
使用:釋出成功之後,該檢視圖層和普通表在查詢時幾乎都是一模一樣的操作,不同的是,表釋出的圖層可以通過wfs_t修改,而檢視圖層不可以。此外,檢視圖層有引數的,在正常請求的wfs,wms的url中要加上viewparams引數。
相關文章
- GeoServer介紹Server
- geoserver的探索Server
- GeoServer 踩過的坑Server
- GeoServer開發環境搭建Server開發環境
- geoserver資料儲存遷移Server
- GeoServer釋出影像WMTS服務Server
- geoserver PostGIS的安裝和使用Server
- GeoServer 常見問題總結Server
- 使用GeoServer+QGIS釋出WMTS服務 | Publishing WMTS Service Using GeoServer+QGISServer
- geoserver將layer打包為shp檔案Server
- 使用GeoServer釋出PostGIS表資料Server
- CentOS7部署geoserver和postgisCentOSServer
- GeoServer中WMS、WFS的請求規範Server
- GeoServer二:釋出服務(postgis資料庫)Server資料庫
- 如何讓向量瓦片配圖神器maputnik支援 geoserverServer
- geoserver+postgis開發環境搭建,再加cesuimServer開發環境UI
- GeoServer學習筆記-2、基本使用(釋出PostGIS表)Server筆記
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- 在GeoServer中使用Udig配置的地圖樣式Server地圖
- Geoserver釋出PostGIS地圖資料:問題記錄Server地圖
- GIS學習記錄(二):GeoServer地理資料匯入Server
- MapBox載入GeoServer釋出的WMS地圖服務Server地圖
- GeoServer釋出PostGIS資料庫中的柵格資料Server資料庫
- OpenLayer4跨域訪問GeoServer釋出的TMS服務跨域Server
- 搭建簡易Web GIS網站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3Web網站ServerSQLS3
- 【環境配置】Geoserver如何訪問shapefile或PostGIS資料庫Server資料庫
- 推薦:JavaEE免費開源WebGIS地理資訊系統GeoServerJavaWebServer
- mapboxgl載入geoserver釋出的tms向量圖層服務Server
- GeoServer + PostGIS 進行圖層檔案資料匯入併發布Server
- GeoServer2.17與Jetty9在Windows上的最佳安裝實踐ServerJettyWindows
- [原]geoserver釋出osgEarth可以適用的高程GeoTIFF資料(WCS)服務Server
- geoserver控制服務訪問許可權-類似百度地圖的keyServer訪問許可權地圖
- GeoServer地圖開發解決方案(四):釋出Web地圖服務(WMS)篇Server地圖Web
- [轉]geoServer 入門到實戰(安裝,釋出服務,wfs空間查詢)Server
- 利用GDAL實現柵格影像差值計算及Geoserver自動釋出柵格影像Server
- oracle之 RAC Interconnect之HAIPOracleAI
- 漢字之美,拼音之韻
- GIS進階-Openlayers、Vue+Openlayers、Leaflet、Geoserver、PostGis、Java整合Geotools、QGIS等前後端使用工具安裝、使用、整合、呼叫三方元件等各種企業級GIS開發專欄分享VueServerJava後端元件