[postgis-users] ST_DWithin_Sphere(point, point, radius)

Paul Ramsey pramsey at opengeo.org
Sun Jun 14 12:21:44 PDT 2009


Here's a simple 80/20 solution for people with lon/lat tables of
points wanting to do distance searches.  It only works for places less
than 60degrees north or south, and only for points. If you know your
data is all more southerly than 60d, adjust the constant factor to
make the index portion of the search more selective (and hence,
efficient (faster)).

-- 
-- ST_DWithin_Sphere(lonlat-point, lonlat-point, radius-in-meters)
returns boolean
--
-- Meters/Degree @ 60N: select 1/distance_sphere('POINT(0
60)','POINT(1 60)') = 1.79866403673916e-05
--
CREATE OR REPLACE FUNCTION ST_DWithin_Sphere(geometry, geometry, float8)
        RETURNS boolean
        AS 'SELECT $1 && ST_Expand($2,$3 * 1.79866403673916e-05) AND
$2 && ST_Expand($1,$3 * 1.79866403673916e-05) AND
ST_Distance_Sphere($1, $2) < $3'
        LANGUAGE 'SQL' IMMUTABLE;



More information about the postgis-users mailing list