sql >> Databasteknik >  >> RDS >> Mysql

Frågar MySQL för latitud- och longitudkoordinater som ligger inom en given mils radie

Sfärisk lag för cosinusformel
(37 och -122 är latitud och longitud för ditt radiecentrum)

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
    * cos( radians( long ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance 
FROM myTable
HAVING distance < 50
ORDER BY distance 

Funktioner

  • Snabbast
  • Precision liknande Harvesine Formula

Haversine-formel

SELECT id, 3959 * 2 * ASIN(SQRT(POWER(SIN((37 - abs(lat)) * pi()/180 / 2), 2)
       + COS(37 * pi()/180 ) * COS(abs(lat) * pi()/180)
       * POWER(SIN((-122 - long) * pi()/180 / 2), 2) )) as  distance
FROM myTable
HAVING distance < 50
ORDER BY distance

Funktioner

  • Snabb
  • Mer robust mot flyttalsfel

Observera att 3959 är jordens radie i miles . Jordens radie i kilometer (km):6371

Du kan hitta mer information här




  1. Tuplar infogas inte sekventiellt i databastabellen?

  2. MySQL Tutorial – Förstå sekunderna bakom Master Value

  3. Använder du LIMIT inom GROUP BY för att få N resultat per grupp?

  4. PHP PDO Förberedd sats bind NULL-värde