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將layer打包為shp檔案Server
- CentOS7部署geoserver和postgisCentOSServer
- geoserver+postgis開發環境搭建,再加cesuimServer開發環境UI
- GeoServer二:釋出服務(postgis資料庫)Server資料庫
- 如何讓向量瓦片配圖神器maputnik支援 geoserverServer
- MapBox載入GeoServer釋出的WMS地圖服務Server地圖
- GeoServer學習筆記-2、基本使用(釋出PostGIS表)Server筆記
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- GeoServer釋出PostGIS資料庫中的柵格資料Server資料庫
- mapboxgl載入geoserver釋出的tms向量圖層服務Server
- GeoServer + PostGIS 進行圖層檔案資料匯入併發布Server
- GeoServer2.17與Jetty9在Windows上的最佳安裝實踐ServerJettyWindows
- [原]geoserver釋出osgEarth可以適用的高程GeoTIFF資料(WCS)服務Server
- [轉]geoServer 入門到實戰(安裝,釋出服務,wfs空間查詢)Server
- geoserver控制服務訪問許可權-類似百度地圖的keyServer訪問許可權地圖
- 利用GDAL實現柵格影像差值計算及Geoserver自動釋出柵格影像Server
- GIS進階-Openlayers、Vue+Openlayers、Leaflet、Geoserver、PostGis、Java整合Geotools、QGIS等前後端使用工具安裝、使用、整合、呼叫三方元件等各種企業級GIS開發專欄分享VueServerJava後端元件
- 漢字之美,拼音之韻
- PHP之string之ord()函式使用PHP函式
- 深入Spring之IOC之載入BeanDefinitionSpringBean
- JavaScript之thisJavaScript
- 若之
- 計算方法之祖沖之的精度
- Kubernetes安裝之八:配置master之schedulerAST
- vue 兄弟元件之間傳值之busVue元件
- 《碼農翻身》之浪潮之巔的WebWeb
- 揭秘ORACLE備份之----RMAN之五(CATALOG)Oracle
- React之元件(component)之間的通訊React元件
- PHP之string之str_split()函式使用PHP函式
- AI犯錯誰之過?切勿盲目相信之AI
- Java常用資料結構之Set之TreeSetJava資料結構
- PHP之string之str_pad()函式使用PHP函式
- flutter之從零開始搭建(一)之 BottomNavigationBarFlutterNavigation