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

时间:2009-07-28 19:16:35

标签: ruby-on-rails activerecord types

我应该将纬度和经度存储为字符串还是浮点数(或其他东西)?

(我在轨道上使用activerecord / ruby​​,如果这很重要的话)。

6 个答案:

答案 0 :(得分:135)

这就是我使用的:

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

答案 1 :(得分:21)

如果您需要进行更复杂的地理计算,可以调查Postgresql的PostGIS或MySQL的MySQL Spatial Extensions。否则,浮点数(双精度可能是一个好主意)应该有效。

编辑:看起来GeoRuby库包含一个Rails扩展,用于处理上述两个数据库的空间/ GIS扩展。

答案 2 :(得分:20)

如果您没有使用支持空间的数据库,Google地图recommends会使用大小为10,6的浮点数。这给你6位小数后的数字 - 如果你想要更高的精度,你可以相应地调整。

答案 3 :(得分:3)

我建议使用花车,虽然它并没有真正发挥作用。如果您将来希望浮动,浮动更容易进行计算。

答案 4 :(得分:2)

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

我想如果它是一个你不想做任何数学运算的字段,你可以使用一个字符串。我会避免这样做。

答案 5 :(得分:-1)

由于它们是固定的精度,因此您应该转换并存储为整数,以显着提高性能。

(见http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL