[postgis-users] Efficient distance querying of lat/long point data in Postgis

Rob Young bobbotron at gmail.com
Mon Jan 15 14:14:04 PST 2007


Hi all,

I am looking to construct a query that selects all of the points
within a certain distance from another point, where all of the points
are stored as lat/long values.  I know that you have to use either
distance_sphere or distance_spheroid for calculating the distance of
the points, but it's creating a proper bounding box (which is speedy
with a GIST index) to reduce the number of points checked with
distance_* that I am wondering about.  I have done a lot of looking
around on the mailing list, but haven't a consensus on what the proper
way to handle this issue.  I found the following thread useful.

http://postgis.refractions.net/pipermail/postgis-users/2005-June/008496.html

However, it's mentioned that expanding around a point using the method
discussed doesn't work well as you approach the poles.

I was wondering if there is an estabilshed way to do this.

If not, I think I have a decent way to do this.  Say you want to find
all of the data with in X km of point A.  You could calculate four
points, B, C, D and E, which X/2 km away from the center.  B is due
north of A, C is due East of A, D is due south of A and E is due West
of A.  Then make a bounding box F with the upper left corner with the
coordinate of ( B.lat, E.lon ) and the lower right corner ( D.lat,
C.lon ).  Then use F to bound the query..  However, there are issues
wrapping around lat and long values with this, I think.

Anyway, I'd rather avoid doing that if possible, as getting all of
that right would be time consuming, especially if there is already a
decent solution to the problem.

Thanks for your help,
Robert Y



More information about the postgis-users mailing list