[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