MySQL-Abfrage von Längen- und Breitengraden für Zeilen innerhalb eines X-Meilen-Radius
Innerhalb einer großen Datenbank mit Geodaten ist es häufig erforderlich, Zeilen abzurufen die in einen bestimmten Umkreis eines bestimmten Ortes fallen. Dies wird üblicherweise mithilfe der sphärischen Geometrie erreicht, um den Abstand zwischen zwei Punkten auf einer Kugel zu berechnen.
Eine solche Abfrage zum Suchen von Zeilen innerhalb eines 25-Meilen-Radius um einen Mittelpunkt liefert einige ungenaue Ergebnisse mit Abständen im Bereich von 86 bis 800 Meilen von der Marke entfernt. Hier ist die ursprüngliche Abfrage:
<code class="sql">SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM `geo_locations` HAVING `distance` < 25 ORDER BY `distance` ASC</code>
Um dieses Problem zu beheben, ändern wir die Abfrage basierend auf einer Lösung, die erfolgreich in einer Filialsuche-Anwendung implementiert wurde:
<code class="sql">SELECT `id`, ( 6371 * acos( cos( radians( :lat ) ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians( :long ) ) + sin(radians(:lat)) * sin(radians(`lat`)) ) ) `distance` FROM `location` HAVING `distance` < :distance ORDER BY `distance` LIMIT 25</code>
In dieser Überarbeitung query:
Mit dieser aktualisierten Abfrage können Sie dies tun Rufen Sie effektiv Zeilen ab, die innerhalb eines bestimmten Meilenradius um einen bestimmten zentralen Ort liegen.
Das obige ist der detaillierte Inhalt von## Wie kann ich MySQL-Zeilen innerhalb eines bestimmten Meilenradius genau abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!