sql >> Base de Datos >  >> RDS >> Mysql

Consulta SQL de geolocalización que no encuentra la ubicación exacta

En tu primera consulta, creo que has invertido las longitudes en la resta. La ley esférica de los cosenos es:

d = acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(long2−long1))*R

Si lat1 se sustituye por tblcity.latitude, long1 debe sustituirse por tblcity.longitude. Creo que accidentalmente ha sustituido long2 en su consulta. ¿Este funciona mejor?

SELECT tblcity.city, tblcity.latitude, tblcity.longitude, 
truncate((degrees(acos( sin(radians(tblcity.latitude)) 
* sin(radians(45.266708)) 
+ cos(radians(tblcity.latitude)) 
* cos(radians(45.266708)) 
* cos(radians(-73.616257 - tblcity.longitude) ) ) ) 
* 69.09*1.6),1) as distance 
FROM tblcity HAVING distance < 10 ORDER BY distance desc 

Todavía no he investigado su segunda consulta, pero espero que eso ayude.