Di dunia saya, menggunakan SRID khusus (untuk Google Maps) sesuatu seperti ini berfungsi:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
di mana jenis location
geometri (Titik, 3785), dan longitude
,, latitude
dan radius
mengapung (misalnya -100, 44, 30 untuk "unit" 100W / 44N / 30 - lihat di bawah)
Lihat Apa cara terbaik untuk menemukan semua objek dalam radius objek lain? dalam postgis docs:
The ST_DWithin(geometry, geometry, distance)
Fungsi merupakan cara mudah melakukan pencarian jarak diindeks. Ia bekerja dengan membuat kotak pencarian yang cukup besar untuk melingkupi radius jarak, kemudian melakukan pencarian jarak yang tepat pada subset hasil yang diindeks.
UPDATE: unit bukan mil untuk SRID 3785 ... mereka tampaknya radian atau derajat atau sesuatu seperti itu. Tetapi spesifikasi untuk SRID saya mengatakan unitnya baik meter atau derajat dan itu jelas bukan keduanya, setidaknya tidak tanpa konversi:
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