Tengo problemas para intentar devolver la ubicación más cercana al usuario a través de una declaración SQL. Para probar que estoy usando las mismas coordenadas exactas, esto es lo que tengo:Medir la distancia entre dos puntos Lat/Lng
SQL:
SELECT `companies`.`customerName` ,
(3959 *
ACOS(
COS(
RADIANS(37.367485) * COS(RADIANS(`locations`.`gps_lat`)) *
COS(
RADIANS(`locations`.`gps_lng`) - RADIANS(-77.399994) +
SIN(RADIANS(37.367485)) * SIN(RADIANS(`locations`.`gps_lat`))
)
)
)
)
AS `distance`
FROM `locations`
JOIN `companies` ON `locations`.`co_id`
HAVING `distance` > 25
ORDER BY distance
LIMIT 0 , 10
Resultados:
| customerName | distance |
| SOME COMPANY | 1914.41747964854 |
locations
valores de la tabla :
gps_lat | gps_lng
37.367485 | -77.399994
he utilizado el ejemplo de Google, he comprobado la fórmula un par de veces y me parece que no puede llegar a que hice mal. Cualquier ayuda es apreciada.
EDIT:
Dado que parece que hay cierta confusión en mí saber lo que estoy haciendo:
El >
fue sustituido para producir un resultado, 1914
es obviamente mayor que 25
.
La aplicación de esto es pasar las coordenadas del usuario de una aplicación de Android a nuestro servidor web. La Latitud y la Longitud se extraerán de los valores $_GET
y se realizarán referencias cruzadas de las empresas en nuestra base de datos MYSQL de servidores web.
La sintaxis anterior es solo yo para verificar mi declaración de SQL en Mysql Workbench. Obviamente estoy buscando un resultado de valor cero.
Si desea que el más cercano, ¿por qué se restringe a "distancia > 25 "? –
Sí lo hice, devolvió cero resultados. Tenga en cuenta la distancia que me dio por encima de – jnthnjns
Dependiendo de qué RDBMS esté utilizando, puede haber formas considerablemente más simples (y más rápidas) de hacerlo. Ejemplo: [MySQL] (http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html), [SQL Server] (http://msdn.microsoft.com/en-us/ library/bb933876% 28v = sql.105% 29.aspx), [PostgreSQL] (http://postgis.refractions.net/). –