Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3 Float or decimal for GPS coordinates

I need to store GPS coordinates in a database. I've heard that floats are less accurate than decimals. Is that true? If so, what reason is there to ever use floats?

like image 382
jac Avatar asked Jun 14 '12 21:06

jac


2 Answers

Since Earth equatorial circumference is around 40000 km and longitude spans 360 degrees, it follows that near the equator 1 degrees is equivalent to about 110 km.

Thus:

  • 0 digit precision: ±110 km
  • 1 digit precision: ±11 km
  • 2 digit precision: ±1.1 km
  • 3 digit precision: ±110 m
  • 4 digit precision: ±11 m
  • 5 digit precision: ±1.1 m
  • 6 digit precision: ±11 cm
  • 7 digit precision: ±1.1 cm

However, the closer you move to the Poles, the smaller the lengths of the parallels becomes. For example near Paris, which has a latitude of 48 degrees, 1 degree is equivalent to cos(48) * 110 = 74 km.

Thus:

  • 0 digit precision: ±74 km
  • 1 digit precision: ±7.4 km
  • 2 digit precision: ±0.74 km
  • 3 digit precision: ±74 m
  • 4 digit precision: ±7.4 m
  • 5 digit precision: ±0.74 m
  • 6 digit precision: ±7.4 cm
  • 7 digit precision: ±0.74 cm

So, field of type DECIMAL(10,7) would be enough to satisfy you rather precise.

like image 52
Paul T. Rawkeen Avatar answered Sep 25 '22 13:09

Paul T. Rawkeen


If you want 100% accuracy with your decimals, then multiply by 10**n(where n is your desired precision), and store as integer.

Float objects represent inexact real numbers using the native architecture's double-precision floating point representation.

See:

http://www.ruby-doc.org/core-1.9.3/Float.html
like image 29
Anil Avatar answered Sep 25 '22 13:09

Anil