búsqueda geográfica mysql

he estado siguiendo esto ejemplo para la búsqueda geográfica en MySQL (¡Tutorial realmente genial!).

Esto es lo que se me ocurrió:

CREATE DEFINER=`root`@`localhost` PROCEDURE `geo_distance`(in _location_id bigint(20), in dist int)
BEGIN
declare mylon double; 
declare mylat double;
declare lon1 float; 
declare lon2 float;
declare lat1 float; 
declare lat2 float;

-- get the original lon and lat for the userid 
select longitude, latitude into mylon, mylat from locations where locations.location_id = _location_id;
-- calculate lon and lat for the rectangle:
set lon1 = mylon - dist / abs(cos(radians(mylat)) * 69);
set lon2 = mylon + dist / abs(cos(radians(mylat)) * 69);
set lat1 = mylat - (dist / 69);
set lat2 = mylat + (dist / 69);

-- run the query:
SELECT destination.*,
3956 * 2 * ASIN(SQRT(POWER(SIN((orig.lat - dest.lat) * pi()/180 / 2), 2) +
COS(orig.lat * pi()/180) * COS(dest.lat * pi()/180) * POWER(SIN((orig.lon -dest.lon) * pi()/180 / 2), 2) )) as distance FROM locations destination, locations origin WHERE origin.location_id=_location_id
and destination.longitude between lon1 and lon2 and destination.latitude between lat1 and lat2 
having distance < dist ORDER BY Distance limit 10;
END

el problema es que no se que es orig.lat y de donde lo llevo, tal vez me falte algo. ¿Puede señalarme mi error o sugerirme una buena fuente para la búsqueda geográfica en MySql?

preguntado el 22 de mayo de 12 a las 18:05

1 Respuestas

La consulta SELECT que se está construyendo aquí es para encontrar ubicaciones que estén cerca (dentro de 10 unidades) de un punto, llamémoslo x

orig es el punto x, entonces para cada registro en la base de datos, está comparando con orig el lat y lon valores para ver si está lo suficientemente cerca para cargar.

En la práctica, supongamos que está cargando una lista de clubes nocturnos cercanos para un usuario, orig es probable que el usuario lo determine escribiendo su código postal, o algo similar...

Si todavía está confundido, hágamelo saber y puedo tratar de ayudar más.

contestado el 28 de mayo de 12 a las 06:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.