Pokud musí být v jediném dotazu, stačí použít výstupní hodnoty ST_X
a ST_Y
v ST_MakePoint
funkce. Pokud jsou hodnoty x a y ve sloupcích nebo jsou výsledkem operace, stačí tyto hodnoty předat do funkce:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Nebo v případě, že jsou uvnitř geometrie..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Pomocí CTE
nebo poddotaz (viz komentáře). Princip je podobný, ale pomocí CTE vytvoříte dočasnou sadu a použijete ji jako tabulku. Následující příklad vygeneruje hodnoty x a y a pojmenuje je j
, pak ve vnějším dotazu zachytíte tyto hodnoty a vytvoříte bod s dalším SELECT
, ale tentokrát pomocí j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Použití na váš dotaz ..
Demo (poddotaz):db<>fiddle
Demo (CTE):db<>fiddle
WITH j AS (
SELECT
ST_X((ST_DumpPoints(ST_AsText(ST_Intersection(
ST_SetSRID(
ST_MakeEnvelope(
ST_X(point),
ST_Y(point),
ST_X(point)+{width},
ST_Y(point)+{height}),
25832),ST_Buffer(j.geometry, {bufferRadius})
)))).geom) AS XOfLowerLeftOfGridCellIntersectingWithBuffer,
ST_Y((ST_DumpPoints(ST_AsText(ST_Intersection(
ST_SetSRID(
ST_MakeEnvelope(
ST_X(point),
ST_Y(point),
ST_X(point)+{width},
ST_Y(point)+{height}),
25832),ST_Buffer(j.geometry, {bufferRadius})
)))).geom) AS YOfLowerLeftOfGridCellIntersectingWithBuffer,
....
)
SELECT ST_MakePoint(XOfLowerLeftOfGridCellIntersectingWithBuffer,
YOfLowerLeftOfGridCellIntersectingWithBuffer)
FROM j
Několik myšlenek k vašemu dotazu (aniž byste byli schopni vidět celkový obrázek):
ST_AsText
Váš dotaz rozhodně nemá smysl. Můžete se toho zbavit.- Všimněte si, že kód, který používáte k extrakci souřadnic x a y, je identický a
ST_DumpPoints
už vrací body. Domnívám se tedy, že vaše logika je chybná, protože znovu vytváříte stejný bod, který jste dříve rozdělili na oddělené hodnoty.