sql - 如何使用通过 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 选择之前放置边界框验证?
或者也许有不同的方法来实现我想要的?
解决方案
您可以添加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:
推荐阅读
- python - 当我尝试在服务器上的 HTML 中打开新链接时,它会将链接与服务器地址结合起来并给出错误
- clojure - 在这种情况下突变的替代方案?
- redux - 元素类型无效:应为字符串/检查 `Provider` 错误的渲染方法
- google-cloud-platform - 以自动方式验证 gcloud 服务帐户
- python - 将数据拆分为多个文件:如何处理(未知数量)多个连接
- android - 如何支持较早的安卓版本?
- html - 向 CSS 中的一个元素添加多个变换值
- data-mining - 数据分析 vs 数据科学 vs 数据挖掘 vs 数据分析
- ms-access - 在 Access 中存储来自报表的数据
- azure - Azure Devops Rest API - 获取当前在代理池中排队的构建