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