GeoServer 查詢sql視圖


說明:

最近項目中遇到一個需求,需要統計管網的長度,但管網數據量非常大,前端用openlayers接口統計直接就奔潰了。

后嘗試使用調后台接口查數據庫的方式,雖然可行但是又要多一層與后台交互的工作。

后來研究發現,GeoServer還能發布數據庫表或視圖,這樣的話就可以跳過后台直接查詢數據庫了,完美解決了統計大數據的問題。

解決方案:

1、登陸GeoServer ==> 找到圖層目錄 ==> 添加新的資源

 

2、添加新圖層里選中以PG為源的圖層,點擊“配置新的SQL視圖”

 

3、從上至下,填完信息,並點擊保存

 

4、保存sql源后,進行發布

 

 5、依次填入正確信息即可發布

 

 6、發布成功后,在Layer Preview里進行驗證,下拉表中選則GeoJson(發布的數據庫表沒有圖形要素信息,所以只能看到GeoJson)

 

7、代碼調用url:

http://localhost:8080/geoserver/gas/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=gas%3Atest_pipe&maxFeatures=50&outputFormat=application%2Fjson

8、附上SQL

CREATE OR REPLACE FUNCTION public.func_pipelength()
  RETURNS TABLE(pipetype integer, pipelength double precision) AS
$BODY$
BEGIN
RETURN QUERY 
select 1 as pipetype,sum(st_length(geom)) as pipelength from t_pressureline tp left join t_pressureline_type tpt on tp.pressuratingcode = tpt.id where tpt.belong = 1
union 
select 2 as pipetype,sum(st_length(geom)) as pipelength from t_pressureline tp left join t_pressureline_type tpt on tp.pressuratingcode = tpt.id where tpt.belong = 2 
union 
select 3 as pipetype,sum(st_length(geom)) as pipelength from t_pressureline tp left join t_pressureline_type tpt on tp.pressuratingcode = tpt.id where tpt.belong = 3
union 
select 0 as pipetype,sum(st_length(geom)) as pipelength from t_pressureline tp left join t_pressureline_type tpt on tp.pressuratingcode = tpt.id where tpt.belong is null;
END;

問題:

 在嘗試過程中還是遇到不少問題的,在此記錄一下,以后再用時可以繼續深入研究

1、GeoServer發布后,常常遇到這個錯,度娘說是返回數據的格式問題,但是不知道怎么查。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM