Calculando distancias con MySQL

Con el lanzamiento por parte de Aytec del portal de gasolineras xinumi me he encontrado con el problema de calcular distancias entre dos puntos, para permitir al usuario encontrar las gasolineras mas cercanas a cierto punto.

MySQL cuenta con una extension muy interesante que se llama spatial extension que permite guardar ila información de longitud y latitud en un formato especial y luego realizar operaciones muy interesantes sobre ellos, como por ejemplo obetener todos los registros que se encuentran a menos de X distancia, usando para ello el comando GLenght. Desafortunadamente todavia no esta implementado en la versión actual de nuestro MySQL.

Pero hay una solución tirando puramente de trigonometria:

SELECT *,(((acos(sin((".$latitude."*pi()/180)) * sin((`latitude_value`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`latitude_value`*pi()/180)) * cos(((".$longitude."- `longitude_value`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM `gastable`  ORDER BY distance ASC LIMIT 0 , 30";

Donde:

$latitude, $longitude: Son las variables con la posición de la cual quereis calular la distancia.

flatitude_value y longitude_value son los nombres de los campos de la tabla de MySQL.

Mas info:

http://marketingtechblog.com/2007/09/15/calculate-distance/

http://maisonbisson.com/blog/post/12146/calculating-distance-between-points-in-mysql/