Hvis de skal være i en enkelt forespørgsel, skal du blot bruge outputværdierne for ST_X
og ST_Y
i ST_MakePoint
fungere. Hvis x- og y-værdierne er i kolonner eller er resultatet af en operation, skal du blot sende disse værdier i funktionen:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Eller hvis de er inden for geometrier...
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Brug af en CTE
eller en underforespørgsel (Se kommentarer). Princippet er det samme, men ved at bruge en CTE opretter du ligesom et midlertidigt sæt og bruger det som en tabel. Følgende eksempel genererer x- og y-værdier og giver det navnet j
, så fanger du disse værdier i den ydre forespørgsel for at oprette et punkt med en anden SELECT
, men denne gang ved hjælp af j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Anvender det på din forespørgsel ..
Demo (underforespørgsel):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
Et par tanker om din forespørgsel (uden at kunne se det store billede):
ST_AsText
giver bestemt ingen mening i din forespørgsel. Du kan slippe af med det.- Bemærk, at den kode, du bruger til at udtrække x- og y-koordinaterne, er identiske, og
ST_DumpPoints
giver allerede point. Så jeg mener, at din logik er mangelfuld, da du genskaber det samme punkt, som du tidligere delte op i adskilte værdier.