我设置了一个PostGIS数据库,它是通过参数化的SQL视图添加到GeoServer中的。我使用Leaflet通过WMS显示这一层。
我想限制我在边界框中看到的特征的数量(在我的例子中最多5个)。我试图在我的SQL视图的末尾添加一个限制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选择之前?
或者也许有一种不同的方法来实现我想要的?
发布于 2021-05-03 21:35:32
您可以添加Geoserver Where Clause placeholder :where_clause:
因为and是自动/系统地添加的,所以您必须已经有了一个where clause,即使它是一个总是计算为真的虚拟1=1子句。
SELECT geometry
FROM table_cities
WHERE 1 = 1 :where_clause:
ORDER BY population
LIMIT 5请注意,1=1和:where_clause:之间缺少and
https://stackoverflow.com/questions/67369565
复制相似问题