S'ils doivent être dans une seule requête, il vous suffit d'utiliser les valeurs de sortie de ST_X
et ST_Y
dans le ST_MakePoint
fonction. Si les valeurs x et y sont en colonnes ou sont le résultat d'une opération, il suffit de passer ces valeurs dans la fonction :
SELECT ST_MakePoint(column_x,column_y) FROM t;
Ou au cas où ils seraient à l'intérieur des géométries..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Utiliser un CTE
ou une sous-requête (Voir commentaires). Le principe est similaire, mais en utilisant un CTE, vous créez en quelque sorte un ensemble temporaire et l'utilisez comme une table. L'exemple suivant génère des valeurs x et y et le nomme j
, puis dans la requête externe, vous attrapez ces valeurs pour créer un point avec un autre SELECT
, mais cette fois en utilisant j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
L'appliquer à votre requête ..
Démo (sous-requête) :db<>fiddle
Démo (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
Quelques réflexions sur votre requête (sans pouvoir voir la situation dans son ensemble) :
ST_AsText
n'a certainement aucun sens dans votre requête. Vous pouvez vous en débarrasser.- Notez que le code que vous utilisez pour extraire les coordonnées x et y est identique, et
ST_DumpPoints
renvoie déjà des points. Donc, je pense que votre logique est erronée, puisque vous recréez le même point que vous avez précédemment divisé en valeurs séparées.