malnefrage.de
malnefrage.de
Menü
Facebook
Twitter
E-Mail
Bookmark
weitere
Ratgeber-Community für Fragen & Antworten:
Forum mit Tipps, Hilfe und Ratschläge
Forum Frage stellen! Neue Fragen Neue Antworten Login
Frage
Frage
von geoleo am 18.06.2021, 19.14 Uhr

Wie die Entfernung zweier GEO-Koordinaten aus einer MySQL Datenbank berechnen / abfragen?

Ich habe eine MySQL Datenbank namens cities in der alle Städte weltweit mit den dazugehörigen GEO-Koordinaten wie Breitengrad (Latitude) und Längengrad (Longitude) gespeichert sind.
Wie kann ich jetzt die Entfernung von zwei Orten berechnen zB zwischen München und Berlin?

Berlin: lat 52.5065117, lng 13.1438725
München: lat 48.1548252, lng 11.4014108

Kennt jemand die mathematische Formel dafür bzw. noch besser die Abfrage in SQL zur Berechnung? Ich habe gelesen das man den Erdradius mit Sinus / Cosinus irgendwie berechnen muss.

Wer kann helfen?

Antwort
Antwort
von math_first am 23.02.2023, 16.05 Uhr
Um die Entfernung zwischen zwei GEO-Koordinaten aus einer MySQL-Datenbank zu berechnen, kannst du die Formel zur Berechnung der Entfernung zwischen zwei Punkten auf der Erdoberfläche verwenden. Die Formel heißt Haversine-Formel und berechnet die Entfernung zwischen zwei Punkten auf der Erde basierend auf ihren geografischen Koordinaten.

Hier ist ein Beispiel, wie du die Haversine-Formel in MySQL verwenden kannst:
SELECT 
    *, 
    6371 * 2 * ASIN(SQRT(POWER(SIN((latitude - abs($latitude)) * pi()/180 / 2), 2) + COS(latitude * pi()/180) * COS(abs($latitude) * pi()/180) * POWER(SIN((longitude - $longitude) * pi()/180 / 2), 2))) as distance 
FROM 
    table 
ORDER BY 
    distance ASC
In diesem Beispiel berechnet die Abfrage die Entfernung zwischen den Koordinaten $latitude und $longitude und den Koordinaten in der Datenbanktabelle "table". Die Ergebnisse werden dann nach Entfernung sortiert.

Du musst lediglich $latitude und $longitude durch deine eigenen Koordinaten ersetzen, um die Entfernung von einem Standort zu einem anderen Punkt zu berechnen.


Antwort
Antwort
von coder am 20.06.2021, 15.31 Uhr
Welche Mysql Datenbank Version nutzt du? Falls MySQL 5.7 oder größer auf dem Server zur Verfügung steht kannst du die ST_Distance_Sphere() Funktion nutzen.

Beispiel:
SELECT ST_Distance_Sphere(
    point(52.5065117, 13.1438725),
    point(48.1548252, 11.4014108)
)
Das Ergebnis der Query wird in Metern zurückgegeben. Falls du Kilometer oder Meilen benötigst bitte entsprechend umrechen.
Ähnliche Fragen
Wie kann man die aktuelle MySQL Datenbank Version herausfinden? Wo kann ich schauen welche Version von MySQL auf dem Server läuft und wo die Datenbank ...
Wie kann man in MySQL eine Volltextsuche mit 3 Zeichen realisieren? Ich versuche über MATCH AGAINST eine MySQL-Volltextsuche über den FULLTEXT Index der ...
Wenn ich unter Windows über die Konsole (cmd.exe) ein MySQL Dump File importiere, werden Umlaute in der Datenbank im phpMyAdmin falsch dargestellt. Der ...
Wie kann ich mich beim MySQL Server auf der Konsole unter Linux anmelden? Ich habe mich per SSH auf meinem Root Server angemeldet. Wie kann ich mich nun ...
Wie kann man in einer MySQL Datenbank doppelte Einträge in einer Spalte finden und löschen? Wenn ich zum Beispiel eine Kundendatenbank habe in der Kunden ...
Nächste Frage

Die auf malnefrage.de veröffentlichten Fragen und Antworten sind Meinungsäußerungen der jeweiligen User. Da die Aussagen nicht geprüft werden, kann die Richtigkeit der Inhalte nicht gewährleistet werden.