首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SQL视图从GeoServer请求的WMS层,我如何才能只显示5个特性?

通过SQL视图从GeoServer请求的WMS层,我如何才能只显示5个特性?
EN

Stack Overflow用户
提问于 2021-05-03 21:14:31
回答 1查看 51关注 0票数 1

我设置了一个PostGIS数据库,它是通过参数化的SQL视图添加到GeoServer中的。我使用Leaflet通过WMS显示这一层。

我想限制我在边界框中看到的特征的数量(在我的例子中最多5个)。我试图在我的SQL视图的末尾添加一个限制5,但它会影响整个地图上的要素数量,而不是边界框中的要素数量。

这里有一个简单的例子来说明这个问题。这样做的目的是让5个人口最多的城市位于边界框中。如果Geoserver进行这样的查询,它将会起作用:

代码语言:javascript
复制
SELECT geometry FROM table_cities 
WHERE geometry && ST_GeomFromText(
'POLYGON ((-5.185 41.954, -5.185 51.374, 23.378 51.374, 23.378 41.954, -5.185 41.954))',
4326) 
ORDER BY population LIMIT 5

但相反,它将SQL视图包装在一个新的SELECT中,专门用于仅保留边界框中的特征:

代码语言:javascript
复制
SELECT geometry FROM 
(SELECT geometry FROM table_cities ORDER BY population LIMIT 5) 
WHERE geometry && ST_GeomFromText(
'POLYGON ((-5.185 41.954, -5.185 51.374, 23.378 51.374, 23.378 41.954, -5.185 41.954))',
4326)

有没有办法强制Geoserver将边界框验证放在LIMIT 5选择之前?

或者也许有一种不同的方法来实现我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 21:35:32

您可以添加Geoserver Where Clause placeholder :where_clause:

因为and是自动/系统地添加的,所以您必须已经有了一个where clause,即使它是一个总是计算为真的虚拟1=1子句。

代码语言:javascript
复制
SELECT geometry 
FROM table_cities 
WHERE 1 = 1 :where_clause:
ORDER BY population 
LIMIT 5

请注意,1=1:where_clause:之间缺少and

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67369565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档