Nel mio mondo, usando un SRID personalizzato (per Google Maps) qualcosa del genere ha funzionato:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
dove il tipo di location
una geometria (punto, 3785), e longitude
, latitude
e radius
sono galleggianti (ad esempio -100, 44, 30 per 100W / 44N / 30 "unità" - vedi sotto)
Vedi Qual è il modo migliore per trovare tutti gli oggetti nel raggio di un altro oggetto? nei documenti postgis:
La ST_DWithin(geometry, geometry, distance)
funzione è un modo pratico per eseguire una ricerca di distanza indicizzata. Funziona creando un rettangolo di ricerca abbastanza grande da racchiudere il raggio della distanza, quindi eseguendo una ricerca della distanza esatta sul sottoinsieme indicizzato di risultati.
AGGIORNAMENTO: le unità non sono miglia per SRID 3785 ... sembrano essere radianti o gradi o qualcosa del genere. Ma la specifica per il mio SRID dice che le sue unità sono o metri o gradi ed è sicuramente nessuna di queste, almeno non senza alcuna conversione:
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