Должен ли я хранить широту и долготу как строки или поплавки (или что-то еще)?
(Я использую activerecord/ruby на рельсах, если это имеет значение).
Должен ли я хранить широту и долготу как строки или поплавки (или что-то еще)?
(Я использую activerecord/ruby на рельсах, если это имеет значение).
Если вам нужно выполнить более сложные географические вычисления, вы можете исследовать PostGIS для Postgresql или MySQL Spatial Extensions для MySQL. Иначе, float (двойная точность может быть хорошей идеей) должен работать.
Редактировать: похоже, что библиотека GeoRuby включает расширение Rails для работы с пространственными расширениями/расширениями ГИС для обеих вышеупомянутых баз данных.
Это то, что я использую:
add_column :table_name, :lat, :decimal, {:precision=>10, :scale=>6}
add_column :table_name, :lng, :decimal, {:precision=>10, :scale=>6}
Если вы не используете базу данных с пространственной поддержкой, Google Maps рекомендует использовать поплавки размера (10,6). Это дает вам 6 цифр после десятичного числа - если вы хотите больше точности, вы можете соответствующим образом настроить.
Я бы предложил использовать float, хотя на самом деле это не так сильно отличается. Поплавки легче выполнять вычисления, если вы когда-либо захотите этого в будущем.
Как правило, вы хотите, чтобы Lat/Long хранился в самом большом поплавком, который у вас есть. На некоторых широтах (например, около экватора) очень малые изменения долготы могут приравниваться к большим различиям в терминах поверхностного расстояния.
Я полагаю, что если это поле, которое вы никогда не захотите делать математикой, вы можете использовать строку. Я бы этого не избежал.
Поскольку они фиксированной точности, вы должны преобразовать и сохранить как целое число для значительного улучшения производительности.
(SEE http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL)