如何通过 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
我设置了一个 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