Datentypen zum Speichern von lng / lat in MySQL


14

Ich speichere eine große Liste von lnt / lat-Punkten in einer MySQL-Datenbank. Im Moment sind dies projizierte Punkte für Großbritannien in M, aber langfristig möchte ich sicherstellen, dass ich die Koordinaten von Punkten für die ganze Welt speichern kann. Welchen Datentyp soll ich verwenden?

Ich habe angefangen zu verwenden decimal(18,12), war mir aber nicht sicher, ob diese Präzision erforderlich ist oder ob ich einfach eine verwenden könnte float. Ich habe meinen Code eingefügt, falls es noch etwas gibt, über das ich nachdenken sollte:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

Ich bin ein Neuling in SQL, daher bin ich mir nicht sicher, ob der Datentyp beim Ausführen einer Abfrage von Bedeutung ist. Ich nahm an, dass der Gesamtspeicher je nach Variablentyp variieren würde. Gibt es einen Vorteil bei der Verwendung einer räumlichen Datenbank gegenüber einer grundlegenden MySQL-Datenbank für diese Art von Arbeit?

Antworten:


16

Diese Frage wurde auch bei StackOverlow gestellt .

Die oberste Antwort schlägt die MySQL Spatial Extensions vor . Es gibt eine Last von Links auf der Arbeit mit diesen Erweiterungen hier .

Wenn Sie keine räumlichen Typen verwenden möchten und Werte von einem GPS-Gerät oder einem Geokodierungsdienst erhalten, können Sie Ihre Dezimalgenauigkeit an die Datenquelle anpassen. Als Faustregel gilt, dass Daten mit einer Genauigkeit von zwei Stellen gespeichert werden, die größer ist als die, die Sie in einer Anwendung anzeigen.

In einem Codebeispiel von Google , in dem Punkte auf einer Karte angezeigt werden, heißt es:

Wenn Sie die MySQL-Tabelle erstellen, möchten Sie den lat- und lng-Attributen besondere Aufmerksamkeit schenken. Mit den aktuellen Zoomfunktionen von Google Maps sollten Sie nur 6 Nachkommastellen benötigen.

Um den für unsere Tabelle erforderlichen Speicherplatz auf ein Minimum zu beschränken, können Sie angeben, dass die Attribute lat und lng Gleitkommazahlen der Größe (10,6) sind. Dadurch können die Felder 6 Nachkommastellen plus bis zu 4 Nachkommastellen speichern, z. B. -123,456789 Grad

Ich würde mir keine Sorgen über Leistungsunterschiede zwischen numerischen Typen machen. Ordentliche Indizes werden eine weitaus größere Wirkung haben.


+1 für eine gute Antwort! Das hätte ich gesagt und getan.
OptimizePrime

Vielen Dank für die Antwort - Ich habe die Dokumentation zu MySQL Spatial Extensions gelesen, aber wie fangen Sie an, sie zu verwenden? Ich habe gerade eine Standard-MySQL-Datenbank auf GoDaddy; Ich weiß nicht, wo ich anfangen soll.
31.


1
Und antworten Sie mit einem Link zu weiteren Links aktualisiert
geographika

Warum 4 ganzzahlige Ziffern?
Alix Axel

6

Sofern Sie aus irgendeinem anderen Grund nicht an MySQL gebunden sind, sollten Sie in Betracht ziehen, eine räumlich aktivierte Datenbank wie postgis zu verwenden, die über ein Point- (und Line-, Polygon- usw.) Objekt verfügt, um diese Details für Sie zu verarbeiten. Sie erhalten auch Projektionsunterstützung, wenn Sie diese Änderung für die ganze Welt vornehmen.

2019 : Für Leute wie mich, die auch keine Kommentare lesen - MySQL unterstützt räumliche Datentypen, angeblich langsamer, ohne Beweise.


Hinweis: Für diejenigen, die neu sind und die obigen Informationen lesen, funktioniert MySql 5.7+ jetzt mit räumlichen Indizes.
HopeKing

aber es ist immer noch langsam
Ian Turton

Könnten Sie bitte mit Ressourcen helfen, die zeigen, wie langsam? Ich denke darüber nach, es für ein Projekt mit weniger als einer Million Datensätzen zu verwenden. Vielen Dank.
HopeKing

persönliche erfahrung keine öffentlichen daten. Zu viele Probleme mit ungültigen Geometrien usw.
Ian Turton

Vielen Dank. Mein Bedürfnis ist nur die Entfernung zwischen Punkten basierend auf Datenbankdatensätzen (und keine komplexen Anforderungen wie Polygon) - dann wird es wahrscheinlich sicher sein, mysql vorerst zu verwenden.
HopeKing
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.