495 Stimmen

Welches ist der ideale Datentyp für die Speicherung von Breiten- und Längengraden in einer MySQL-Datenbank?

In Anbetracht der Tatsache, dass ich Berechnungen auf Lat/Long-Paaren durchführen werde, welcher Datentyp ist am besten für die Verwendung mit einer MySQL-Datenbank geeignet?

47voto

Gajus Punkte 61796

Das hängt von der Genauigkeit ab, die Sie benötigen.

Datatype           Bytes       resolution
------------------ -----  --------------------------------
Deg*100 (SMALLINT)     4  1570 m    1.0 mi  Cities
DECIMAL(4,2)/(5,2)     5  1570 m    1.0 mi  Cities
SMALLINT scaled        4   682 m    0.4 mi  Cities
Deg*10000 (MEDIUMINT)  6    16 m     52 ft  Houses/Businesses
DECIMAL(6,4)/(7,4)     7    16 m     52 ft  Houses/Businesses
MEDIUMINT scaled       6   2.7 m    8.8 ft
FLOAT                  8   1.7 m    5.6 ft
DECIMAL(8,6)/(9,6)     9    16cm    1/2 ft  Friends in a mall
Deg*10000000 (INT)     8    16mm    5/8 in  Marbles
DOUBLE                16   3.5nm     ...    Fleas on a dog

Von: http://mysql.rjweb.org/doc.php/latlng

Zusammengefasst:

  • Die präziseste verfügbare Option ist DOUBLE .
  • Der am häufigsten verwendete Typ ist DECIMAL(8,6)/(9,6) .

Ab dem MySQL 5.7 zu verwenden. Räumliche Datentypen (SDT), insbesondere POINT für die Speicherung einer einzelnen Koordinate. Vor 5.7 unterstützt SDT keine Indizes (mit Ausnahme von 5.6, wenn der Tabellentyp MyISAM ist).

Anmerkung:

  • Bei der Verwendung von POINT Klasse muss die Reihenfolge der Argumente für die Speicherung von Koordinaten sein POINT(latitude, longitude) .
  • Es gibt eine spezielle Syntax für Erstellung eines räumlichen Indexes .
  • Der größte Vorteil von SDT ist, dass Sie Zugang zu folgenden Informationen haben Funktionen für räumliche Analysen z. B. Berechnung der Entfernung zwischen zwei Punkten ( ST_Distance ) und die Bestimmung, ob ein Punkt in einem anderen Bereich enthalten ist ( ST_Contains ).

37voto

saeed khalafinejad Punkte 1132

Basierend auf diesem Wiki-Artikel http://en.wikipedia.org/wiki/Decimal_degrees#Accuracy der geeignete Datentyp in MySQL ist Decimal(9,6) für die Speicherung von Längen- und Breitengrad in separaten Feldern.

29voto

Utilisez DECIMAL(8,6) für den Breitengrad (90 bis -90 Grad) und DECIMAL(9,6) für den Längengrad (180 bis -180 Grad). 6 Dezimalstellen sind für die meisten Anwendungen ausreichend. Beide sollten "vorzeichenbehaftet" sein, um negative Werte zu ermöglichen.

22voto

Mariano Peinador Punkte 592

Laut Google Maps ist die beste Lösung FLOAT(10,6) für lat und lng.

8voto

Wir speichern Breitengrad/Längengrad X 1.000.000 in unserer Oracle-Datenbank als ZIFFERN, um Rundungsfehler bei Doppelwerten zu vermeiden.

In Anbetracht der Tatsache, dass Breitengrad/Längengrad bis zur 6. Dezimalstelle 10 cm genau waren, war das alles, was wir brauchten. Viele andere Datenbanken speichern Breiten- und Längengrade ebenfalls mit der 6.

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