2009-07-28 3 views
60

Должен ли я хранить широту и долготу в виде строк или поплавков (или что-то еще)?Правильный тип данных для широты и долготы? (in activerecord)

(Я использую activerecord/ruby ​​на рельсах, если это имеет значение).

+0

Какую базу данных вы используете? –

+0

Mysql в разработке и postgresql в производстве (почему это важно?) –

+0

Возможный дубликат [Какой идеальный тип данных используется при хранении широты/долготы в базе данных MySQL?] (Http://stackoverflow.com/questions/ 159255/what-is-the-ideal-data-type-to-use-when-storing-latitude-longitudes-in-mysql) – Gajus

ответ

16

Если вам нужно выполнить более сложные географические вычисления, вы можете исследовать PostGIS для Postgresql или MySQL Spatial Extensions для MySQL. В противном случае, поплавок (двойная точность может быть хорошей идеей) должен работать.

Edit: Похоже GeoRuby библиотека включает в себя расширение Rails для работы с пространственными расширений/ГИС для обоих вышеупомянутых баз данных.

2

Я бы предложил использовать поплавки, хотя на самом деле это не так важно. Поплавки легче выполнять вычисления, если вы когда-либо захотите этого в будущем.

1

Как правило, вы хотите, чтобы Lat/Long хранился в самом большом поплавком типе, который у вас есть. На некоторых широтах (например, около экватора) очень малые изменения долготы могут приравниваться к большим различиям в терминах поверхностного расстояния.

Я полагаю, что если это поле, в котором вы никогда не захотите делать математику, вы можете использовать строку. Я бы этого не избежал.

16

Если вы не используете базу данных с пространственной поддержкой, Google Maps recommends использует поплавки размера (10,6). Это дает вам 6 цифр после десятичной дроби - если вы хотите больше точности, вы можете соответствующим образом настроить.

112

Это то, что я использую:

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

Значение должно быть в интервале (-180, 180), правильно? Почему ваш масштаб не равен 7? – taro

+13

Из документации Google Maps: «Чтобы сохранить пространство памяти, необходимое для вашей таблицы, как минимум, вы можете указать, что атрибуты lat и lng являются платами размера (10,6)», –

Смежные вопросы