5 Stimmen

Wie man MySQL-geografische Erweiterungen mit sphärischen Geometrien verwendet

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?

4voto

Seth Punkte 42154

Wie geht man in der Regel mit der Diskontinuität im Längengrad um, wenn man mit sphärischen Geometrien in Datenbanken arbeitet?

Nicht viele Leute verwenden MySQL dafür, weil seine geografischen Erweiterungen nicht wirklich auf dem neuesten Stand sind.

Von den Dokumenten: "Alle Berechnungen erfolgen unter der Annahme der euklidischen (planaren) Geometrie."

Die Lösung besteht normalerweise darin, eigene Methoden zu entwickeln.

Alternativ können Sie es vortäuschen - wenn Ihre Entfernungen weniger als etwa 500 Meilen betragen, können Sie Ihre Breiten- und Längenangaben als rechteckige Koordinaten behandeln und einfach die euklidische Distanzformel verwenden (sqrt(a^2 + b^2)).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X