sql >> Databasteknik >  >> RDS >> Mysql

Geolokalisering SQL-fråga hittar inte exakt plats

I din första fråga tror jag att du har inverterat longituderna i subtraktionen. Cosinusets sfäriska lag är:

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

Om lat1 ersätts med tblcity.latitude, måste long1 ersättas med tblcity.longitude. Jag tror att du av misstag har ersatt long2 i din fråga. Fungerar den här bättre?

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 

Jag har inte tittat på din andra fråga än, men förhoppningsvis hjälper det.



  1. SQL gå med hjälp för vänlistan

  2. konvertera MySQL SET-datatypen till Postgres

  3. MySQL INSERT eller REPLACE kommandon

  4. Vad betyder %Type i Oracle sql?