PostGIS ST_Buffer त्रिज्या सहायता


9

मैं दिए गए बिंदु के पांच मील के दायरे में सभी बिंदुओं को खोजने की कोशिश कर रहा हूं। मेरे पास इस तरह से एक प्रश्न है:

SELECT * FROM table WHERE ST_Contains(ST_Buffer(geomFromText('POINT(0 0)', 4326), ?), latlon)

?पाँच मील जाने के लिए (त्रिज्या) के स्थान पर मैंने जो कुछ रखा है, उसका मैं पता नहीं लगा सकता । सब कुछ EPSG 4326 में है, और PostGIS प्रलेखन के अनुसार (जैसा कि सबसे अच्छा मैं बता सकता हूं), मेरा त्रिज्या मीटर में होना चाहिए। अगर मैं 12,070.0 मीटर (लगभग 5-मील) में डालता हूं, तो मुझे पूरे देश में आधे रास्ते मिलते हैं। क्या किसी को पता है कि मुझे क्या याद आ रहा है?


4326 dd (दशमलव डिग्री) है। 12070 काफी बड़ा क्षेत्र (त्रिज्या) है, जब इसे लैट्लोन के रूप में प्रक्षेपित किया जाता है।
ब्रैड नेसोम

1
गलत - 12 070 मीटर = 7.49995029 मील तो 5 मील 8046.72 मीटर है तो (? = 8046.72) - क्या आपका डेटा भूगोल या ज्यामिति है?
Mapperz

जवाबों:


14

क्योंकि आपके डेटा को अनुमानित नहीं किया गया है - यह एक गोलाकार पर बिंदु है - रैखिक दूरी की तरह कोई मतलब नहीं है। भूमध्य रेखा पर पांच मील आर्कटिक सर्कल पर 5 मील से बहुत छोटा कोण है। लेकिन सौभाग्य से PostGIS (> = 1.5) का उत्तर आपके लिए है:

SELECT * FROM table WHERE ST_DWithin(ST_GeogFromText('SRID=4326;POINT(0,0)'), geography(latlon), 12070);

इसका एक geographyप्रकार है जो केवल इस प्रकार की चीज़ के लिए डिज़ाइन किया गया है। यह ज्यामिति के समान है, लेकिन यह केवल EPSG: 4326 का उपयोग करता है, और इसके साथ काम करने वाले बहुत कम कार्य हैं।

नमूना ऊपर, मैं कहा जाता है में ST_GeogFromText () (वहाँ भी एक है ST_GeographyFromText () , और मुझे यकीन है कि नहीं कर रहा हूँ अगर वहाँ एक अंतर है) रुचि का विषय पर (यह नियमित वाली WKT- साथ काम कर सकते हैं, क्योंकि SRID पैरामीटर है निरर्थक), और भूगोल प्रकार के लिए लैटोन कॉलम कास्ट करें। यदि आप इनमें से बहुत कुछ कर रहे हैं, तो अपनी तालिका में भूगोल कॉलम बनाना और कलाकारों को पूरी तरह से छोड़ना अधिक कुशल हो सकता है। अंत में, ST_DWithin () भूगोल पैरामीटर ले सकता है, और यह रैखिक दूरी के साथ सही काम करता है।


मैं मदद की सराहना करता हूं। मैं अभी भी PostGIS के लिए काफी नया हूं।
निक

4

शायद आप इसके बजाय ST_DWithin फ़ंक्शन चाहते हैं। नोट st_buffer डॉक्टर में देखें।
ST_Buffer

त्रिज्या खोज करने की कोशिश करने के लिए लोग अक्सर इस फ़ंक्शन का उपयोग करने की गलती करते हैं। त्रिज्या खोज के लिए एक बफर बनाना धीमा और व्यर्थ है। इसके बजाय ST_DWithin का उपयोग करें ।

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