Richtiger Datentyp für Längen- und Breitengrad? (in Aktivaufzeichnung)


78

Sollte ich Längen- und Breitengrade als Strings oder Floats (oder etwas anderes) speichern?

(Ich benutze Activerecord / Ruby auf Schienen, wenn das wichtig ist).

Aktualisieren:

MySQL in der Entwicklung und Postgresql in der Produktion (warum ist das wichtig?)


MySQL in der Entwicklung und Postgresql in der Produktion (warum ist das wichtig?)
Tom Lehman

Antworten:


23

Wenn Sie komplexere geografische Berechnungen durchführen müssen, können Sie PostGIS für Postgresql oder MySQL Spatial Extensions für MySQL untersuchen. Andernfalls sollte ein Schwimmer (doppelte Genauigkeit könnte eine gute Idee sein) funktionieren.

Bearbeiten: Es sieht so aus, als ob die GeoRuby- Bibliothek eine Rails-Erweiterung für die Arbeit mit den räumlichen / GIS-Erweiterungen für beide oben genannten Datenbanken enthält.


Es gibt noch eine andere populärere Bibliothek, die Sie ausprobieren könnten. Geocoder oder Kasse Github
Denn

149

Das benutze ich:

add_column :table_name, :lat, :decimal, {:precision=>10, :scale=>6}
add_column :table_name, :lng, :decimal, {:precision=>10, :scale=>6}

1
Der Wert sollte innerhalb des Intervalls (-180, 180) liegen, richtig? Warum ist Ihre Skala nicht 7?
Taro

17
Aus der Google Maps-Dokumentation: "Um den für Ihre Tabelle erforderlichen Speicherplatz auf ein Minimum zu beschränken, können Sie angeben, dass die Attribute lat und lng Floats der Größe (10,6) sind"
Jaco Pretorius,

21

Wenn Sie keine räumlich aktivierte Datenbank verwenden, empfiehlt Google Maps die Verwendung von Floats der Größe (10,6). Das gibt Ihnen 6 Stellen nach der Dezimalstelle - wenn Sie mehr Präzision wünschen, können Sie entsprechend anpassen.


3

Ich würde vorschlagen, Floats zu verwenden, obwohl dies keinen großen Unterschied macht. Floats sind einfacher zu berechnen, wenn Sie dies in Zukunft wünschen.


2

Im Allgemeinen möchten Sie, dass Lat / Long in dem größten Float-Typ gespeichert wird, den Sie haben. In einigen Breiten (z. B. in der Nähe des Äquators) können sehr kleine Längenänderungen großen Unterschieden in Bezug auf die Oberflächenentfernung entsprechen.

Ich nehme an, wenn es sich um ein Feld handelt, auf dem Sie niemals rechnen möchten, können Sie eine Zeichenfolge verwenden. Das würde ich aber vermeiden.


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.