首页 > 解决方案 > 如何使用通过 SQL 视图从 GeoServer 请求的 WMS 图层仅显示 5 个要素?

问题描述

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

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

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

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 中,该 SELECT 专用于仅保留位于边界框中的特征:

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 选择之前放置边界框验证?

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

标签: sqlpostgisgeoserverbounding-boxwms

解决方案


您可以添加Geoserver Where 子句占位符 :where_clause:

因为 anand是自动/系统添加的,所以您必须已经有 a where clause,即使它是一个1=1始终评估为 true 的虚拟子句。

SELECT geometry 
FROM table_cities 
WHERE 1 = 1 :where_clause:
ORDER BY population 
LIMIT 5

注意和之间and没有1=1:where_clause:


推荐阅读