PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक स्थानिक ऑपरेशन के इनपुट के रूप में कॉलम के मूल्य का उपयोग कैसे करें

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्कीमा में पोस्टग्रेस्क्ल अनुक्रम नेक्स्टवल

  2. CREATE FUNCTION के एक स्ट्रिंग होने के बाद का कोड क्या दर्शाता है?

  3. मैं 3 तालिकाओं में कैसे शामिल हो सकता हूं और डुप्लिकेट पंक्तियों के बिना 2 तालिकाओं से फ़ील्ड के सही योग की गणना कैसे कर सकता हूं?

  4. अभी () फ़ंक्शन से घंटे घटाएं

  5. क्वेरी जहां विदेशी कुंजी कॉलम NULL हो सकता है