Dans mon monde, utiliser un SRID personnalisé (pour Google Maps) quelque chose comme ça a fonctionné:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
où le type de location
est une géométrie (Point, 3785), et longitude
, latitude
et radius
sont des flotteurs (par exemple -100, 44, 30 pour des "unités" 100W / 44N / 30 - voir ci-dessous)
Voir Quelle est la meilleure façon de trouver tous les objets dans un rayon d'un autre objet? dans les documents postgis:
La ST_DWithin(geometry, geometry, distance)
fonction est un moyen pratique d'effectuer une recherche de distance indexée. Il fonctionne en créant un rectangle de recherche suffisamment grand pour englober le rayon de distance, puis en effectuant une recherche de distance exacte sur le sous-ensemble de résultats indexé.
MISE À JOUR: les unités ne sont pas des miles pour SRID 3785 ... elles semblent être des radians ou des degrés ou quelque chose comme ça. Mais la spécification de mon SRID indique que ses unités sont en mètres ou en degrés et ce n'est certainement ni l'un ni l'autre, du moins pas sans une certaine conversion:
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