ऐसा करने का सबसे आसान और तेज़ तरीका निर्देशांकों को geometry
. के रूप में संग्रहीत करना होगा या geography
अलग समन्वय जोड़े के बजाय:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
उसके बाद, इस नए कॉलम पर एक सार इंडेक्स बनाएं:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
ST_DWithin
का उपयोग करें क्वेरी दूरी के लिए, ST_DistanceSphere
. के रूप में या ST_Distance
होगा नहीं स्थानिक सूचकांक का उपयोग करें!
SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true);
- नोट:
true
कार्यों मेंST_DWithin
औरST_Distance
मतलब use_spheroid=true , जोgeography
. के लिए डिफ़ॉल्ट है पैरामीटर।
डेमो:db<>fiddle
यह भी देखें:निर्दिष्ट निर्देशांकों से 5 मील के दायरे में सभी भवन प्राप्त करना