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?)

Tom Lehman
quelle
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.

Greg Campbell
quelle
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}
Gokul
quelle
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.

Chris B.
quelle
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.

Mike Trpcic
quelle
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.

TED
quelle