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

Paul Ramsey pramsey at opengeo.org
Sun Jun 14 12:22:35 PDT 2009


Oh, it also doesn't handle the international date line. Like I said,
it's a simple hack for people with simple data.

On Sun, Jun 14, 2009 at 12:21 PM, Paul Ramsey<pramsey at opengeo.org> wrote:
> 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