Mysql
 sql >> Database >  >> RDS >> Mysql

La query SQL di geolocalizzazione non trova la posizione esatta

Nella tua prima domanda, credo che tu abbia invertito le longitudini nella sottrazione. La legge sferica del coseno è:

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

Se lat1 viene sostituito con tblcity.latitude, long1 deve essere sostituito con tblcity.longitude. Penso che tu abbia accidentalmente sostituito long2 nella tua query. Questo funziona meglio?

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 

Non ho ancora esaminato la tua seconda domanda, ma spero che questo aiuti.