पोस्टजीआईएस
इस तरह की मेज पर लेट और लॉन्ग स्टोर न करें। इसके बजाय एक PostGIS ज्यामिति या भूगोल प्रकार का उपयोग करें ।
CREATE EXTENSION postgis;
CREATE TABLE foo (
geog geography;
);
CREATE INDEX ON foo USING gist(geog);
INSERT INTO foo (geog)
VALUES (ST_MakePoint(x,y));
अब जब आपको इसे क्वेरी करने की आवश्यकता हो, तो आप KNN (<->
) का उपयोग कर सकते हैं। )
जो वास्तव में एक अनुक्रमणिका पर ऐसा करेगा।
SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;
आपकी क्वेरी में, आपके पास स्पष्ट रूप से HAVING distance < 5
. है . आप इसे इंडेक्स पर भी कर सकते हैं।
SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;
यह सुनिश्चित करता है कि यदि सभी बिंदु distance_in_meters
. के बाहर हैं तो कुछ भी वापस नहीं किया जाता है ।
इसके अलावा x और y दशमलव संख्याएँ हैं ST_MakePoint(46.06, 14.505)