यदि उन्हें एक ही प्रश्न में होना है, तो आपको बस 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
का उपयोग करना या एक सबक्वेरी (टिप्पणियां देखें)। सिद्धांत समान है, लेकिन एक सीटीई का उपयोग करके आप एक अस्थायी सेट बनाते हैं और इसे एक टेबल के रूप में उपयोग करते हैं। निम्न उदाहरण 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
पहले से ही अंक लौटाता है। इसलिए, मेरा मानना है कि आपका तर्क त्रुटिपूर्ण है, क्योंकि आप उसी बिंदु को फिर से बना रहे हैं जिसे आपने पहले अलग किए गए मानों में विभाजित किया था।