En mi mundo, usando un SRID personalizado (para Google Maps) algo como esto funcionó:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
donde el tipo de location
es una geometría (Point, 3785), y longitude
, latitude
y radius
son flotadores (por ejemplo, -100, 44, 30 para 100W / 44N / 30 "unidades" - ver más abajo)
Vea ¿Cuál es la mejor manera de encontrar todos los objetos dentro de un radio de otro objeto? en los documentos postgis:
La ST_DWithin(geometry, geometry, distance)
función es una forma práctica de realizar una búsqueda de distancia indexada. Funciona creando un rectángulo de búsqueda lo suficientemente grande como para encerrar el radio de distancia, luego realiza una búsqueda de distancia exacta en el subconjunto indexado de resultados.
ACTUALIZACIÓN: las unidades no son millas para SRID 3785 ... parecen ser radianes o grados o algo así. Pero la especificación para mi SRID dice que sus unidades son metros o grados y definitivamente no es ninguno de esos, al menos no sin alguna conversión:
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