पहला - मुझे लगता है कि lat_long भूगोल प्रकार स्तंभ है। यदि यह ज्यामिति प्रकार का कॉलम है तो आपको मेरे उदाहरणों को कुछ अन्य ईपीएसजी (पूरी दुनिया के लिए 3857 मीट्रिक ईपीएसजी) में संशोधित करना होगा। यह बहुत महत्वपूर्ण है क्योंकि st_dwithin चेक इन मीटर्स जियोप्राफी टाइप के लिए, और मैप यूनिट्स में ज्योमेट्री के लिए (और EPSG 4326 यूनिट के लिए डिग्री नॉट मीटर है)
अपना डेटा इस तरह डालें
insert into car_wash values (1,'aaa',st_setsrid(st_makepoint(54.51, 22.54),4326))
मैं समझाता हूं कि st_setsrid, st_makepoint का उपयोग क्यों करें, और 4326 क्या है।- 4326 EPSG 4326 है - यह सबसे प्रसिद्ध समन्वय संदर्भ प्रणाली है (जहां आपके पास अक्षांश और डिग्री में लंबा है)।
-
st_makepoint - आपके अक्षांश और लंबे निर्देशांक से भूगोल बिंदु बनाएगा। यह बाइट्स की तरह दिखेगा, लेकिन चिंता न करें, अगर आपको कुछ कारणों से लेट और लॉन्ग की आवश्यकता होगी तो आप उन्हें st_x() और st_y() या st_astext() फ़ंक्शन के साथ प्राप्त कर सकते हैं। जियोम्स या जियोग (इस मामले में) की सबसे अच्छी बात यह है कि आप जिस्ट इंडेक्स का उपयोग कर सकते हैं। बहुत शक्तिशाली टूल जो आपके भौगोलिक प्रश्नों को गति देता है।
-
st_setsrid - st_makepoint बिंदु बनाएगा लेकिन srid=0 के साथ। आपको POSTGIS को यह बताना होगा कि उसे आपके डेटा को किस EPSG में पढ़ना चाहिए। उदाहरण के लिए यदि आप उसे 4326 के साथ इसे पढ़ने के लिए कहते हैं तो यह Google दुनिया के नक्शे पर सही जगहों पर होगा, लेकिन यदि आप उदाहरण के लिए 3857 कहते हैं तो यह पूरी तरह से अलग जगह पर होगा, क्योंकि 3857 मीट्रिक सिस्टम डिग्री नहीं है, इसलिए यह लगभग 50 होगा और बाएं कोने से 50 मीटर (या शायद ऊपर छोड़ दिया, याद नहीं)
जियोग पर इंडेक्स बनाएं
create index on car_wash using gist (geog);
हमारे पास टेबल है, हमारे पास डेटा है और उस पर इंडेक्स है। अब हम यह जांचना चाहते हैं कि आपका पॉइंट आपकी किसी कार वॉश के पास तो नहीं है।
select *
from car_wash cw
where ST_DWithin (cw.geog,ST_GeogFromtext('SRID=4326;POINT(54.21 22.54)'),1000)
AND cw.was_deleted=false
में ST_Dतीसरे मापदंडों के भीतर मीटर (जियोरपाही) या मानचित्र इकाइयों (ज्यामिति) में दूरी है। तो इस मामले में यह आपको सभी कार वॉश दिखाएगा जो आपके उपयोगकर्ता स्थान से 1000 मीटर तक हैं और हटाए नहीं गए हैं।