Trong thế giới của tôi, sử dụng SRID tùy chỉnh (cho Google Maps), một cái gì đó như thế này đã hoạt động:
SELECT * FROM addresses WHERE ST_DWithin(location, ST_SetSRID(ST_MakePoint(longitude, latitude), 3785), radius);
trong đó loại location
là hình học (Điểm, 3785) và longitude
, latitude
và radius
là hình nổi (ví dụ -100, 44, 30 cho 100W / 44N / 30 "đơn vị" - xem bên dưới)
Xem cách tốt nhất để tìm tất cả các đối tượng trong bán kính của một đối tượng khác là gì? trong các tài liệu postgis:
Các ST_DWithin(geometry, geometry, distance)
chức năng là một cách tiện dụng thực hiện một tìm kiếm khoảng cách lập chỉ mục. Nó hoạt động bằng cách tạo một hình chữ nhật tìm kiếm đủ lớn để bao quanh bán kính khoảng cách, sau đó thực hiện tìm kiếm khoảng cách chính xác trên tập hợp con kết quả được lập chỉ mục.
UPDATE: đơn vị không phải là dặm cho SRID 3785 ... họ dường như là một trong hai radian hoặc độ hoặc một cái gì đó như thế. Nhưng đặc điểm kỹ thuật cho SRID của tôi nói rằng các đơn vị của nó là mét hoặc độ và nó chắc chắn không phải là một trong số đó, ít nhất là không có một số chuyển đổi:
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