Rails 3浮点或十进制表示GPS坐标

我需要将GPS坐标存储在数据库中。 我听说漂浮物不如小数精确。 真的吗? 如果是这样,有什么理由可以使用花车?

如果你想要更准确的GPS坐标,那么是小数点是要走的路。 您可以使用以下迁移创建它们:

create_table "models" do |t| t.decimal "latitude", :precision => 15, :scale => 10, :default => 0.0 t.decimal "longitude", :precision => 15, :scale => 10, :default => 0.0 end 

人们使用花车的原因是它们通常对于大多数使用情况来说足够精确并且使用较少的空间来存放。

由于地球赤道周长约为40000公里 ,经度跨度为360度 ,因此赤道附近1度相当于约110公里

从而:

  • 0位精度:±110 km
  • 1位精度:±11 km
  • 2位精度:±1.1 km
  • 3位精度:±110米
  • 4位精度:±11米
  • 5位精度:±1.1 m
  • 6位精度:±11厘米
  • 7位精度:±1.1厘米

但是,移动到波兰人越近,平行线的长度就越小。 例如, 巴黎附近,纬度为48度,1度相当于cos(48) * 110 = 74 km

从而:

  • 0位精度:±74 km
  • 1位精度:±7.4 km
  • 2位精度:±0.74 km
  • 3位精度:±74米
  • 4位精度:±7.4 m
  • 5位精度:±0.74米
  • 6位精度:±7.4 cm
  • 7位精度:±0.74厘米

因此, DECIMAL(10,7)类型的字段足以让您满意。

如果你想要小数的100%准确度,那么乘以10 ** n(其中n是你想要的精度),并存储为整数。

Float对象使用本机架构的双精度浮点表示来表示不精确的实数。

看到:

 http://www.ruby-doc.org/core-1.9.3/Float.html 

正如你在Paul的回答中所看到的,这取决于你的用例。
float提供大约6位十进制数的精度。
例如,一个地址,±11厘米是完全可以接受的。 如果你正在显示地址,你不太可能进行任何会导致舍入错误的算术运算。