Om de måste vara i en enda fråga behöver du helt enkelt använda utdatavärdena för ST_X
och ST_Y
i ST_MakePoint
fungera. Om x- och y-värdena finns i kolumner eller är resultatet av en operation behöver du bara skicka dessa värden i funktionen:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Eller om de är inom geometrier...
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Använda en CTE
eller en underfråga (Se kommentarer). Principen är liknande, men med en CTE skapar du liksom en tillfällig uppsättning och använder den som en tabell. Följande exempel genererar x- och y-värden och ger det namnet j
, sedan i den yttre frågan fångar du dessa värden för att skapa en punkt med en annan SELECT
, men den här gången med j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Tillämpar det på din fråga ..
Demo (underfråga):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ågra tankar om din fråga (utan att kunna se helheten):
ST_AsText
definitivt ingen mening i din fråga. Du kan bli av med det.- Observera att koden du använder för att extrahera x- och y-koordinaterna är identiska och
ST_DumpPoints
ger redan poäng. Så jag tror att din logik är felaktig, eftersom du återskapar samma punkt som du tidigare delade upp i separerade värden.