Ако те трябва да бъдат в една заявка, просто трябва да използвате изходните стойности на ST_X
и ST_Y
в ST_MakePoint
функция. Ако стойностите x и y са в колони или са резултат от операция, просто трябва да предадете тези стойности във функцията:
SELECT ST_MakePoint(column_x,column_y) FROM t;
Или в случай, че са вътре в геометрии...
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
Използване на CTE
или подзаявка (Вижте коментарите). Принципът е подобен, но с помощта на CTE създавате временен набор и го използвате като таблица. Следващият пример генерира x и y стойности и го наименува j
, след това във външната заявка улавяте тези стойности, за да създадете точка с друг SELECT
, но този път използвайки j
:
WITH j AS (
SELECT 1 AS X, 2 AS y -- your big query goes here
)
SELECT ST_MakePoint(X,Y) FROM j;
Прилага се към вашата заявка ..
Демо (подзаявка):db<>fiddle
Демо (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
Няколко мисли относно вашето запитване (без да можете да видите голямата картина):
ST_AsText
определено няма смисъл в запитването ви. Можете да се отървете от него.- Имайте предвид, че кодът, който използвате за извличане на координатите x и y, е идентичен и
ST_DumpPoints
вече връща точки. Така че смятам, че логиката ви е погрешна, тъй като пресъздавате същата точка, която преди това сте разделили на отделни стойности.