Se devono trovarsi in una singola query, devi semplicemente utilizzare i valori di output di ST_X
e ST_Y
nel ST_MakePoint
funzione. Se i valori xey sono in colonne o sono il risultato di un'operazione, devi semplicemente passare questi valori nella funzione:
SELECT ST_MakePoint(column_x,column_y) FROM t;
O nel caso siano all'interno di geometrie..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Utilizzando un CTE
o una sottoquery (vedi commenti). Il principio è simile, ma usando un CTE crei un set temporaneo e lo usi come tabella. L'esempio seguente genera valori xey e lo chiama j
, quindi nella query esterna catturi questi valori per creare un punto con un altro SELECT
, ma questa volta usando j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Applicandolo alla tua richiesta ..
Demo (sottoquery):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
Alcuni pensieri sulla tua domanda (senza poter vedere il quadro generale):
ST_AsText
sicuramente non ha senso nella tua query. Puoi liberartene.- Nota che il codice che stai usando per estrarre le coordinate xey è identico e
ST_DumpPoints
restituisce già punti. Quindi, credo che la tua logica sia imperfetta, dal momento che stai ricreando lo stesso punto che in precedenza hai diviso in valori separati.