Se eles tiverem que estar em uma única consulta, basta usar os valores de saída de
ST_X
e ST_Y
no ST_MakePoint
função. Se os valores x e y estiverem em colunas ou forem o resultado de uma operação, basta passar esses valores na função:SELECT ST_MakePoint(column_x,column_y) FROM t;
Ou caso estejam dentro de geometrias..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Usando um
CTE
ou uma subconsulta (ver comentários). O princípio é semelhante, mas usando um CTE você meio que cria um conjunto temporário e o usa como uma tabela. O exemplo a seguir gera valores x e y e o nomeia j
, então na consulta externa você pega esses valores para criar um ponto com outro SELECT
, mas desta 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;
Aplicando-o à sua consulta ..
Demonstração (subconsulta):
db<>fiddle
Demonstração (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
Alguns pensamentos sobre sua consulta (sem poder ver o quadro geral):
ST_AsText
definitivamente não faz sentido em sua consulta. Você pode se livrar dele.- Observe que o código que você está usando para extrair as coordenadas xey são idênticos e
ST_DumpPoints
já retorna pontos. Portanto, acredito que sua lógica esteja falha, pois você está recriando o mesmo ponto que dividiu anteriormente em valores separados.