Я создаю запрос 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()
.