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的都会报这个错

原文地址:https://www.cnblogs.com/giser-s/p/11496466.html

时间: 2024-08-25 13:50:52

GeoServer 查询sql视图的相关文章

第7讲-SQL语言复杂查询之视图

三级模式两层映像:对应概念模式的数据在SQL中被称为基本表,而对应外模式的数据称为视图.视图不仅包含外模式,而且包含E-C映像. SQL数据库结构: 1)基本表是实际存储文件的表,基本表中的数据时需要存储的. 2)视图在SQL中只存储其由基本表导出视图的所有公式,即由基本表产生视图的映像信息.视图并不存储数据. 3)对视图数据的更改最终要反映在对基本表的更改上. 1.定义视图 Create View view_name 列名1[...] as (子查询[with check option]);

在SQL Server的子查询、视图、内联函数等数据库对象中,不应该单独使用ORDER BY语句

我们知道在SQL语句中,ORDER BY语句可以用来排序.但是在SQL Server中,如果我们在子查询.视图.内联函数等数据库对象中单独使用ORDER BY语句是不允许的,来看下面的SQL语句: SELECT * FROM ( SELECT [ID],[Code],[Name],[Age],[Sex],[Class] FROM [dbo].[Student] ORDER BY [ID] DESC ) AS T_Student 执行该语句,SQL Server会报错,错误信息如下: The OR

SQL 视图

视图: 1.视图的概述       视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储       与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个

sql视图

什么是视图 大家都知道,我们国家现在“神七”上天了.从美国的月球登月开始,人类上天不再是神话.听说,在美国,你只要出几十万美元,您就可以上一次月球进行太空旅行,所以,我们相信:在不久的将来,上天旅行将走进我们百姓的生活,那是一件多么新鲜神奇的事情啊.好多美国人上天后,他们用望远镜观看我们的地球,结果看到的地球形状各不相同.有的说象绿色的橘子,有的说象白色的大鸭梨,有的说象蓝色的大西瓜.这是为什么呢?你肯定会说:那是因为从不同的角度(视角),看到的不同形状而已.那么,从不同的视角,将看到不同的“图

SQL Server T—SQL 视图 事务

一 视图 视图是存储在数据库中的查询的SQL 语句, 视图是从一个或多个表或视图中导出的表,是一张虚表,只能对视图进行查询,不能增.删.改. 对视图进行修改要在相应的基本表中进行修改,修改会自动的反应到视图 创建视图:               create  view  视图名 as SQL查询语句               -- 视图中不能出现重复列 视图的用法: select * from 视图名 二 事务 保障流程的完整执行,就像银行取钱,先在你账上扣钱,然后存入别人的账上:但是从你

[转]查询 SQL Server 系统目录常见问题

查询 SQL Server 系统目录常见问题 http://msdn.microsoft.com/zh-cn/library/ms345522.aspx#_FAQ4 下列部分按类别列出常见问题. 数据类型 如何找到指定表中列的数据类型? 如何找到指定表中的 LOB 数据类型? 如何找到依赖于指定数据类型的列? 如何找到依赖于指定 CLR 用户定义类型或别名数据类型的计算列? 如何找到依赖于指定 CLR 用户定义类型或别名类型的参数? 如何找到依赖于指定 CLR 用户定义类型的 CHECK 约束?

sql 视图的作用(转http://www.cup.edu.cn/nic/Programing/database/34943.htm)

前段时间作项目中,遇到使用视图的问题,以前的工作中很少遇到视图,认为直接用表就ok了,何须视图呢?下面我来讲述一下它的功用:以往当我们查询数据时,一定要很认真的地从设计select语句开始,将需要查询的每个字段写在sql语句里, 前段时间作项目中,遇到使用视图的问题,以前的工作中很少遇到视图,认为直接用表就ok了,何须视图呢?下面我来讲述一下它的功用:以往当我们查询数据时,一定要很认真的地从设计select语句开始,将需要查询的每个字段写在sql语句里,每次你要以同样的条件来查询数据时,那么每次

SQL 视图(Views)

SQL 视图(Views) 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 您可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样. SQL CREATE VIEW 语法 CREATE VIEW view_name AS SELECT

基于成本的优化--CBO-------v$SQL视图

详解v$SQL视图 查询消耗磁盘I/O最多的SQL语句 select sql_text,executions,disk_reads from v$sql where disk_reads>&number order by disk_reads desc; 使用变量&number使得用户可以自定义磁盘读取的次数,executions说明语句执行的时间量,包括该语句的等待时间和服务时间 分析缓冲区读取次数最多的SQL语句 查询逻辑读取数最多的SQL语句 select sql_text,b