2009-07-28 7 views
60

Devrais-je stocker la latitude et la longitude sous forme de chaînes ou de flottants (ou quelque chose d'autre)? (J'utilise activerecord/ruby ​​sur les rails, si cela est important).Type de données correct pour la latitude et la longitude? (dans activeecord)

+0

Quelle base de données utilisez-vous? –

+0

Mysql en développement et postgresql en production (pourquoi est-ce important?) –

+0

duplication possible de [Quel est le type de données idéal à utiliser pour stocker la latitude/longitudes dans une base de données MySQL?] (Http://stackoverflow.com/questions/ 159255/quel-est-le-type-de-données-idéal-à-utiliser-quand-stocker-latitude-longitudes-dans-un-mysql) – Gajus

Répondre

16

Si vous devez effectuer des calculs géographiques plus complexes, vous pouvez rechercher PostGIS pour Postgresql ou MySQL Spatial Extensions pour MySQL. Sinon, un flotteur (double précision pourrait être une bonne idée) devrait fonctionner.

Modifier: Il semble que la bibliothèque GeoRuby inclut une extension Rails pour travailler avec les extensions spatiales/SIG des deux bases de données susmentionnées.

2

Je suggère d'utiliser des flotteurs, même si cela ne fait pas vraiment la différence. Les flotteurs sont plus faciles à faire des calculs si jamais vous le désirez à l'avenir.

1

Généralement, vous voulez que Lat/Long soit stocké dans le plus grand type de flotteur que vous avez. À certaines latitudes (par exemple: près de l'équateur), de très petits changements de longitude peuvent équivaloir à de grandes différences en termes de distance de surface.

Je suppose que si c'est un champ sur lequel vous ne voudrez plus jamais faire de maths, vous pouvez utiliser une chaîne. Je l'éviterais cependant.

16

Si vous n'utilisez pas une base de données spatialement activée, Google Maps recommends utilise des flottants de taille (10,6). Cela vous donne 6 chiffres après la virgule - si vous voulez plus de précision, vous pouvez ajuster en conséquence.

112

C'est ce que j'utilise:

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

La valeur devrait être dans l'intervalle (-180, 180), droite? Pourquoi votre balance n'est pas 7? – taro

+13

Dans la documentation de Google Maps: "Pour conserver au minimum l'espace de stockage requis pour votre table, vous pouvez spécifier que les attributs lat et lng sont des flottants de taille (10,6)" –

Questions connexes