【发布时间】:2020-02-01 05:37:04
【问题描述】:
我正在构建一个 Postgres 查询,它需要对数组中的每个条目调用一个聚合函数,然后将所有这些聚合值连接在一起。
这是对其中一个聚合的查询:
WITH mvtdata AS
(
SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12,513,412)) AS geom, name, description
FROM feature
WHERE feature_set = 'river'
AND ST_Intersects(geom, ST_TileEnvelope(12,513,412))
)
SELECT ST_AsMVT(mvtdata.*, 'river')
FROM mvtdata;
我有一个单独的表来定义不同的数据层。每个数据层都需要调用上述查询并连接其结果。
假设我有一个具有以下值的 layer 表(如果更简单,我也可以使用数组):
| name |
| 'river' |
| 'building' |
我想为表中的每个条目调用一次上述查询并将值连接起来。比如:
WITH riverdata AS
(
SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12,513,412)) AS geom, name, description
FROM feature
WHERE feature_set = 'river'
AND ST_Intersects(geom, ST_TileEnvelope(12,513,412))
),
buildingdata AS
(
SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12,513,412)) AS geom, name, description
FROM feature
WHERE feature_set = 'building'
AND ST_Intersects(geom, ST_TileEnvelope(12,513,412))
)
SELECT (ST_AsMVT(riverdata.*, 'river') || ST_AsMVT(buildingdata.*, 'building')) mvt
FROM riverdata, buildingdata;
如何编写查询以使用这样的表(或数组)动态连接任意数量的数据层?每层有一个单独的ST_AsMVT() 调用很重要。
【问题讨论】:
标签: sql postgresql postgis