80 votes

Type de données correct pour la latitude et la longitude? (en activerecord)

Devrais-je stocker la latitude et la longitude sous forme de chaînes ou de flotteurs (ou autre chose)?

(J'utilise Activerecord / Ruby on rails, si cela compte).

154voto

Gokul Points 854

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}
 

23voto

Greg Campbell Points 10321

Si vous avez besoin de faire plus complexe géographique des calculs, vous pouvez étudier PostGIS pour Postgresql ou MySQL Spatial Extensions pour MySQL. Sinon, un flotteur (double précision pourrait être une bonne idée) devrait fonctionner.

Edit: Il ressemble à la GeoRuby de la bibliothèque comprend des Rails d'extension pour travailler avec l'espace/SIG extensions pour les deux bases susmentionnées.

22voto

Chris B Points 7476

Si vous n'utilisez pas de base de données à fonctionnalité spatiale, Google Maps recommande l' utilisation de flottants de taille (10,6). Cela vous donne 6 chiffres après la décimale - si vous voulez plus de précision, vous pouvez ajuster en conséquence.

3voto

Mike Trpcic Points 12741

Je suggérerais d'utiliser des flotteurs, bien que cela ne fasse pas vraiment une grande différence. Les flotteurs sont plus faciles à calculer si vous le souhaitez dans le futur.

2voto

T.E.D. Points 26829

En règle générale, vous souhaitez stocker Lat / Long dans le type de flotteur le plus grand que vous avez. À certaines latitudes (par exemple, près de l'équateur), de très faibles changements de longitude peuvent équivaloir à de grandes différences en termes de distance surface.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X