Ben Clewett wrote:

Hi,

I have a need to locate (x,y) coordinates from mysql where they are close to another coordinate. For instance, all pizza bars near my car.

Example:  Searching for points closer than z to (i,j) using Pythagoras:

SET i = 10;
SET j = 10;
SET z = 30;
SELECT x, y
  FROM coordinates
  WHERE POW(x - @i, 2) + POW(y - @i, 2) < POW(@z, 2)

Big problem! Must searches every row. Linear indexing not able to help here.


I have been reading the Geographic Spacial extensions to MySQL. Which enable me to store the coordinates in a far more useful form. But do not seem to offer me the type of index I need.


This must be a common problem, is there any person who can help me?

Thanks in advance,

Ben Clewett.


I wish mysql had the ability to automatically convert points to different coordinate systems then get the distance like PostGIS, but it doesn't. Anyway, I believe this will get you distance in miles:

SELECT(
 DEGREES(
    ACOS(
       SIN(RADIANS( latitude1 )) * SIN(RADIANS( latitude2 ))
           +  COS(RADIANS( latitude1 )) * COS(RADIANS( latitude2 ))
           * COS(RADIANS( longitude1 - longitude2 ))
       ) * 60 * 1.1515
    )
 ) AS distance

where latitude1, latitude1, longitude2, longitude2 are columns

Just SORT that by distance.
You can also do HAVING distance < 20 for example, to cut down on the number of 
points returned.


--
http://www.douglassdavis.com

Reply via email to