GeoServer 查询sql视图

Posted giser-s

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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发布后,常常遇到这个错,度娘说是返回数据的格式问题,但是不知道怎么查。

经测试,用到case whe、Group by的都会报这个错

技术图片

 

以上是关于GeoServer 查询sql视图的主要内容,如果未能解决你的问题,请参考以下文章

geoserver配置SQL图层 cql_filter模糊查询

geoserver配置SQL图层 cql_filter模糊查询

geoserver图层属性查询及查询结果转换为arcgis js api能使用的格式

无法在 GeoServer 中创建 SQL Server 数据存储

geoserver浏览过的切片缓存在哪里删除

sql oracle spatial表供geoserver使用