Ich würde gerne Tausende von Breiten- / Längengradpunkten in einer MySQL-Datenbank speichern. Es ist mir gelungen, die Tabellen einzurichten und die Daten mithilfe der geografischen Erweiterungen hinzuzufügen, bei denen die Spalte 'coord' ein Punkt(lat, lng) ist.
Problem:
Ich möchte schnell die 'N' nächsten Einträge zu Breitengrad 'X' Grad und Längengrad 'Y' Grad finden. Da die Distance() -Funktion noch nicht implementiert wurde, habe ich die GLength() -Funktion verwendet, um die Entfernung zwischen (X, Y) und jedem der Einträge zu berechnen, sortiert nach aufsteigender Entfernung und beschränkt auf 'N' Ergebnisse. Das Problem besteht darin, dass dies keine kürzeste Entfernung mit sphärischer Geometrie berechnet. Das bedeutet, dass, wenn Y = 179,9 Grad ist, die Liste der nächsten Einträge nur Längengrade ab 179,9 und abnehmend enthält, obwohl nähere Einträge mit Längengraden zunehmen von -179,9 existieren.
Wie geht man typischerweise mit der Diskontinuität bei Längengraden um, wenn man mit sphärischen Geometrien in Datenbanken arbeitet? Es muss eine einfache Lösung dafür geben, aber ich suche vielleicht nach dem falschen, denn ich habe noch nichts Hilfreiches gefunden.
Sollte ich die GLength() -Funktion einfach vergessen und meine eigene Funktion zur Berechnung des Winkelabstands erstellen? Wenn ich das tue, wird es immer noch schnell sein und von den geografischen Erweiterungen profitieren?
Danke!
josh
UPDATE:
Dies ist genau das, was ich oben beschrieben habe. Es gilt jedoch nur für SQL Server. Offenbar hat SQL Server Datentypen für Geometrie und Geografie. Die Geografie macht genau das, was ich brauche. Gibt es etwas Ähnliches in MySQL?