Должен ли я хранить широту и долготу в виде строк или поплавков (или что-то еще)?Правильный тип данных для широты и долготы? (in activerecord)
(Я использую activerecord/ruby на рельсах, если это имеет значение).
Должен ли я хранить широту и долготу в виде строк или поплавков (или что-то еще)?Правильный тип данных для широты и долготы? (in activerecord)
(Я использую activerecord/ruby на рельсах, если это имеет значение).
Если вам нужно выполнить более сложные географические вычисления, вы можете исследовать PostGIS для Postgresql или MySQL Spatial Extensions для MySQL. В противном случае, поплавок (двойная точность может быть хорошей идеей) должен работать.
Edit: Похоже GeoRuby библиотека включает в себя расширение Rails для работы с пространственными расширений/ГИС для обоих вышеупомянутых баз данных.
Я бы предложил использовать поплавки, хотя на самом деле это не так важно. Поплавки легче выполнять вычисления, если вы когда-либо захотите этого в будущем.
Как правило, вы хотите, чтобы Lat/Long хранился в самом большом поплавком типе, который у вас есть. На некоторых широтах (например, около экватора) очень малые изменения долготы могут приравниваться к большим различиям в терминах поверхностного расстояния.
Я полагаю, что если это поле, в котором вы никогда не захотите делать математику, вы можете использовать строку. Я бы этого не избежал.
Если вы не используете базу данных с пространственной поддержкой, Google Maps recommends использует поплавки размера (10,6). Это дает вам 6 цифр после десятичной дроби - если вы хотите больше точности, вы можете соответствующим образом настроить.
Это то, что я использую:
add_column :table_name, :lat, :decimal, {:precision=>10, :scale=>6}
add_column :table_name, :lng, :decimal, {:precision=>10, :scale=>6}
Значение должно быть в интервале (-180, 180), правильно? Почему ваш масштаб не равен 7? – taro
Из документации Google Maps: «Чтобы сохранить пространство памяти, необходимое для вашей таблицы, как минимум, вы можете указать, что атрибуты lat и lng являются платами размера (10,6)», –
Поскольку они фиксированные точность, вы должны преобразовать и сохранить в виде целого числа для значительного повышения производительности.
(СМ http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL)
Какую базу данных вы используете? –
Mysql в разработке и postgresql в производстве (почему это важно?) –
Возможный дубликат [Какой идеальный тип данных используется при хранении широты/долготы в базе данных MySQL?] (Http://stackoverflow.com/questions/ 159255/what-is-the-ideal-data-type-to-use-when-storing-latitude-longitudes-in-mysql) – Gajus