Als ze in een enkele query moeten staan, hoeft u alleen de uitvoerwaarden van ST_X
te gebruiken en ST_Y
in de ST_MakePoint
functie. Als de x- en y-waarden in kolommen staan of het resultaat zijn van een bewerking, hoeft u deze waarden alleen maar door te geven in de functie:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Of in het geval dat ze binnen geometrieën zijn..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Een CTE
gebruiken of een subquery (zie opmerkingen). Het principe is vergelijkbaar, maar met een CTE maak je een soort tijdelijke set en gebruik je deze als een tabel. Het volgende voorbeeld genereert x- en y-waarden en noem deze j
, dan vang je in de buitenste query deze waarden om een punt te maken met een andere SELECT
, maar deze keer met j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Toepassen op uw vraag ..
Demo (subquery):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
Een paar gedachten over uw vraag (zonder het grote geheel te kunnen zien):
ST_AsText
absoluut geen zin in je vraag. Je kunt er vanaf komen.- Houd er rekening mee dat de code die u gebruikt om de x- en y-coördinaten te extraheren identiek zijn, en
ST_DumpPoints
levert al punten op. Dus ik denk dat je logica gebrekkig is, omdat je hetzelfde punt opnieuw maakt dat je eerder in afzonderlijke waarden had opgesplitst.