正确的纬度和经度数据类型?(在activerecord中)


78

我应该将经纬度存储为字符串或浮点数(或其他)吗?

(如果有的话,我在轨道上使用activerecord / ruby​​)。

更新:

开发中的MySQL和生产中的PostgreSQL(为什么重要?)


开发中的MySQL和生产中的PostgreSQL(这有什么关系?)
汤姆·雷曼

Answers:



149

这是我用的:

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

1
该值应在间隔(-180,180)之内,对吗?为什么您的秤不是7?
芋头

17
从Google Maps文档中:“为了使表格所需的存储空间最小,您可以指定lat和lng属性为大小为(10,6)的浮点数”
Jaco Pretorius 2014年

21

如果您不使用启用空间的数据库,则Google Maps建议使用大小为(10,6)的浮点数。小数点后有6位数字-如果您想提高精度,可以相应地进行调整。


3

我建议使用浮点数,尽管实际上并没有太大的区别。如果将来需要,浮点数将更易于计算。


2

通常,您希望纬度/经度存储在您拥有的最大浮点类型中。在某些纬度(例如,在赤道附近),经度的很小变化可能等同于地表距离的大差异。

我想如果这是您永远不想进行任何数学运算的字段,则可以使用字符串。我会避免的。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.