मेरी दुनिया में, कस्टम SRID (Google मानचित्र के लिए) का उपयोग करके कुछ इस तरह से काम किया गया है:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
जहाँ एक प्रकार का location
ज्यामिति (बिंदु, 3785), और longitude
, latitude
और radius
फ़्लोट्स हैं (जैसे -100, 44N, 100W / 44N / 30 "इकाइयों" के लिए - नीचे देखें)
देखें कि किसी अन्य वस्तु के दायरे में सभी वस्तुओं को खोजने का सबसे अच्छा तरीका क्या है? पोस्टगिस डॉक्स में:
ST_DWithin(geometry, geometry, distance)
समारोह एक अनुक्रमित दूरी खोज करने के एक आसान तरीका है। यह दूरी त्रिज्या को घेरने के लिए एक बड़ी खोज आयत बनाकर काम करता है, फिर परिणामों की अनुक्रमित सबसेट पर सटीक दूरी की खोज करता है।
अद्यतन: इकाइयाँ SRID 3785 के लिए मील की दूरी पर नहीं हैं ... वे या तो रेडियन या डिग्री या ऐसा कुछ प्रतीत होते हैं। लेकिन मेरी एसआरआईडी के लिए विशिष्टता कहती है कि इसकी इकाइयाँ या तो मीटर या डिग्री हैं और यह निश्चित रूप से उनमें से कुछ भी नहीं है, कम से कम कुछ रूपांतरण के बिना नहीं:
alex=# select * from spatial_ref_sys where srid=3785;
srid | auth_name | auth_srid | srtext | proj4text
3785 | EPSG | 3785 | PROJCS["Popular Visualisation CRS / Mercator (deprecated)",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",NORTH]] | +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs