ज्यामिति में ST_Transform को कॉल करना जो पहले से ही लक्ष्य श्रीड में है?


11

मैं एक फ़ंक्शन लिख रहा हूं जिसमें एक ज्यामिति है जो एक पैरामीटर के रूप में है जो विभिन्न अनुमानों में हो सकती है:

CREATE OR REPLACE FUNCTION foo(in geometry) RETURNS boolean AS $$
DECLARE
    transformed_geom geometry := in;
BEGIN
    IF ST_SRID(transformed_geom) != 32737 THEN
        transformed_geom := ST_Transform(transformed_geom, 32737);
    END IF;
    [ ... ]
END;
$$ language plpgsql;

फ़ंक्शन को एक विशिष्ट प्रक्षेपण (32737) में ज्यामिति की आवश्यकता होती है, लेकिन मैं कॉल करने वाले को परिवर्तन करने के लिए बाध्य नहीं करना चाहता, मैं इसे फ़ंक्शन के अंदर संभालना पसंद करता हूं।

सवाल यह है कि वास्तविक सिड की जांच के बजाय, हमेशा ST_Transform को कॉल करना सुरक्षित है ? अगर ज्यामिति पहले से ही लक्ष्य प्रक्षेपण में है तो क्या कुछ करेंगे?

मैं इस तरह से एक प्रश्न के साथ जाँच करता हूं कि यह सुरक्षित लगता है, लेकिन यह भयानक होगा यदि कोई इस बात की पुष्टि कर सकता है क्योंकि मैंने इसे डॉक्स में नहीं देखा था।

SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;

जवाबों:


12

स्रोत में और बाहर के लिए फ़ंक्शन समान चेक करता है, और यदि स्रोत कोड दिखाता है तो अछूता रहता है :

/*
* If input SRID and output SRID are equal, return geometry
* without transform it
*/
if ( input_srid == output_srid )
    PG_RETURN_POINTER(PG_GETARG_DATUM(0));

स्रोत कोड लिंक करने के लिए धन्यवाद। वह सत्य का अनूठा स्रोत है।
फ्रांसिस्को पुगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.