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

jac*_*jac 12 floating-point ruby-on-rails decimal-point

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

Pau*_*een 26

由于地球赤道周长约为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米
  • 5位精度:±0.74米
  • 6位精度:±7.4 cm
  • 7位精度:±0.74厘米

因此,类型领域DECIMAL(10,7)足以让您满意.


Pet*_*own 13

如果你想要更精确的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
Run Code Online (Sandbox Code Playgroud)

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