मेरे पास दो ज्यामिति स्तंभों के साथ PostGIS तालिका है, दोनों को SRID 4326 के साथ परिभाषित किया गया है। मैं बिना किसी समस्या के तालिका में सम्मिलित कर सकता हूं, निम्नलिखित INSERT
कथन का उपयोग करके (जहां lng
और lat
प्रोग्राम में पारित मान हैं):
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
लेकिन जब मैं ST_Intersects का उपयोग कर, एक चौराहे के लिए क्वेरी बिंदु के मूल्य के आधार पर मैं ERROR: Operation on mixed SRID geometries
।
उदाहरण के लिए, यह क्वेरी काम करती है:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
और यह त्रुटियां बाहर हैं:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
ध्यान दें, वे देशांतर के मान को छोड़कर समान प्रश्न हैं। मैंने विभिन्न मूल्यों के साथ प्रयोग किया है, लेकिन काम नहीं करने वाले प्रश्नों के बीच एक स्पष्ट संक्रमण बिंदु की पहचान नहीं की है।
मुझे लगता है कि मैं मौलिक रूप से कुछ गलत समझ रहा हूं। फिलहाल, मैंने ST_GeomFromText
SRID का उपयोग करने और स्पष्ट रूप से निर्दिष्ट करने के लिए क्वेरी को पुन: स्वरूपित करके समस्या को हल / सुधार / हल किया है।
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
लेकिन मैं सच में समझ नहीं पाता कि क्या अंतर है, या अगर यह वास्तव में "समाधान" है।
मेरा प्रश्न है: मुझे केवल विशिष्ट मानों के लिए त्रुटि क्यों हो रही है, और इस क्वेरी को प्रारूपित करने का उचित तरीका क्या है?
यहाँ संदर्भ के लिए मेरी तालिका परिभाषा है:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
मैंने यह भी सत्यापित किया है कि ज्यामिति में एक ही प्रकार का SRID_columns है:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
मदद / सलाह की सराहना की। धन्यवाद! (नोट: मैंने यह प्रश्न भी देखा है , लेकिन चूंकि मैं तालिका में सम्मिलित करते समय पहले से ही अपनी ज्यामिति SRID को स्पष्ट रूप से परिभाषित कर रहा हूं, ऐसा लगता है कि ऐसा नहीं है।)
SRID=4326
कथन के शेष भाग के लिए SRID को सेट करने का सही तरीका (जैसा आपने ऊपर दिया था) के साथ एक क्वेरी को प्रीफ़िक्स कर रहा है? (जैसाST_GeomFromText
कि मैं सिर्फ इसलिए नहीं जानता था कि SRID को निर्दिष्ट करने का उपयोग करने के विरोध में ...)? क्या प्रश्नों के लिए एक डिफ़ॉल्ट SRID सेट करने का एक तरीका है? हर बार स्पष्ट रूप से सेट करने के लिए बल्कि क्रिया को लगता है। फिर से धन्यवाद!