如何通过 SQL 视图使用从 GeoServer 请求的 WMS 图层仅显示 5 个要素?

How can I keep only 5 features on display with a WMS layer requested from GeoServer via a SQL view?

我设置了一个 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 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 选择之前进行边界框验证?

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

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

因为 and 是 automatically/systematically 添加的,所以您必须已经有一个 where clause,即使它是一个始终计算为真的虚拟 1=1 子句。

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

请注意 1=1:where_clause:

之间缺少 and