Correct datatype for latitude and longitude? (in activerecord)

Ruby on-RailsActiverecordTypes

Ruby on-Rails Problem Overview


Should I store latitude and longitude as strings or floats (or something else)?

(I'm using activerecord / ruby on rails, if that matters).

Update:

Mysql in development and postgresql in production (why does it matter?)

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

This is what I use:

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

Solution 2 - Ruby on-Rails

If you need to do more complex geographical calculations, you can investigate PostGIS for Postgresql or MySQL Spatial Extensions for MySQL. Otherwise, a float (double precision might be a good idea) should work.

Edit: It looks like the GeoRuby library includes a Rails extension for working with the spatial/GIS extensions for both of the aforementioned databases.

Solution 3 - Ruby on-Rails

If you're not using a spatially-enabled database, Google Maps recommends using floats of size (10,6). That gives you 6 digits after the decimal - if you want more precision, you can adjust accordingly.

Solution 4 - Ruby on-Rails

I would suggest using floats, although it doesn't really make that much of a difference. Floats are easier to do calculations on if you ever desire that in the future.

Solution 5 - Ruby on-Rails

Generally you want Lat/Long stored in the largest float type you have. At some latitudes (eg: near the equator) very small changes in longitude can equate to large differences in terms of surface distance.

I suppose if it is a field which you won't ever want to do any math on, you could use a string. I'd avoid that though.

Solution 6 - Ruby on-Rails

Since they're fixed precision, you should convert and store as integer for a significant performance improvement.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTom LehmanView Question on Stackoverflow
Solution 1 - Ruby on-RailsGokulView Answer on Stackoverflow
Solution 2 - Ruby on-RailsGreg CampbellView Answer on Stackoverflow
Solution 3 - Ruby on-RailsChris BView Answer on Stackoverflow
Solution 4 - Ruby on-RailsMike TrpcicView Answer on Stackoverflow
Solution 5 - Ruby on-RailsT.E.D.View Answer on Stackoverflow
Solution 6 - Ruby on-RailsYarinView Answer on Stackoverflow