Si tienen que estar en una sola consulta, simplemente necesita usar los valores de salida de ST_X
y ST_Y
en el ST_MakePoint
función. Si los valores de x e y están en columnas o son el resultado de una operación, simplemente necesita pasar estos valores en la función:
SELECT ST_MakePoint(column_x,column_y) FROM t;
O en caso de que sean geometrías internas..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Usando un CTE
o una subconsulta (Ver comentarios). El principio es similar, pero al usar un CTE creas un conjunto temporal y lo usas como una tabla. El siguiente ejemplo genera valores x e y y asígnele el nombre j
, luego, en la consulta externa, captura estos valores para crear un punto con otro SELECT
, pero esta vez usando j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Aplicándolo a su consulta ..
Demostración (subconsulta):db<>fiddle
Demostración (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
Algunas reflexiones sobre su consulta (sin poder ver el panorama general):
ST_AsText
definitivamente no tiene sentido en su consulta. Puedes deshacerte de él.- Tenga en cuenta que el código que está utilizando para extraer las coordenadas x e y son idénticos y
ST_DumpPoints
ya devuelve puntos. Entonces, creo que su lógica es defectuosa, ya que está recreando el mismo punto que dividió previamente en valores separados.