Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die Großkreisentfernung nur mit MySQL berechnen?

Wie kann ich die Großkreisentfernung nur mit MySQL berechnen?

Susan Sarandon
Susan SarandonOriginal
2024-12-26 14:18:11554Durchsuche

How Can I Calculate Great Circle Distance Using Only MySQL?

MySQL-Großkreisentfernung (Haversine-Formel)

Dieser Artikel befasst sich mit der Herausforderung, die Großkreisentfernung zwischen zwei geografischen Koordinaten ausschließlich mit MySQL zu berechnen . Die herkömmliche PHP-Implementierung, die mehrere SQL-Abfragen und komplexe Berechnungen umfasst, kann umständlich sein.

Lösung

Um den PHP-Code in reines MySQL zu konvertieren, nutzen wir die Haversine-Formel , eine mathematische Gleichung, die den Abstand zwischen zwei Punkten auf einer Kugel berechnet. Diese Formel wird von den MySQL-Funktionen ACOS() und RADIANS() unterstützt.

Hier ist die entsprechende MySQL-Abfrage:

SELECT id, (
  3959 * ACOS(
    COS(RADIANS(37)) * COS(RADIANS(lat))
    * COS(RADIANS(lon) - RADIANS(-122)) + SIN(RADIANS(37)) * SIN(RADIANS(lat))
  )
) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0, 20;

Erklärung

  • Die Abfrage wählt die ID und den berechneten Abstand aus der Markierungstabelle aus.
  • Die ACOS()-Funktion berechnet die Winkel zwischen den beiden Punkten, der dann mit 3959 (Erdradius in Meilen oder 6371 für Kilometer) multipliziert wird.
  • Die RADIANS()-Funktion wandelt die Koordinaten in Bogenmaß um.
  • Das HAVING -Klausel filtert Ergebnisse heraus, bei denen die Entfernung weniger als 25 Meilen (oder Kilometer) beträgt.
  • Die ORDER BY-Klausel sortiert die Ergebnisse nach Entfernung in aufsteigende Reihenfolge.
  • Die LIMIT-Klausel begrenzt die Anzahl der Ergebnisse auf 20.

Mit diesem MySQL-basierten Ansatz können Sie den Großkreisabstand zwischen Koordinaten effizient berechnen, ohne dass dies erforderlich ist für externe PHP-Berechnungen oder zusätzliche SQL-Abfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Großkreisentfernung nur mit MySQL berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn