Правильний тип даних для широти та довготи? (в активному записі)


78

Чи слід зберігати широту та довготу як рядки чи плаваючі (чи щось інше)?

(Я використовую activerecord / ruby ​​на рейках, якщо це важливо).

Оновлення:

Mysql у розробці та postgresql у виробництві (чому це важливо?)


Mysql у розробці та postgresql у виробництві (чому це важливо?)
Том Леман

Відповіді:


23

Якщо вам потрібно зробити більш складні географічні розрахунки, ви можете дослідити PostGIS для Postgresql або MySQL Spatial Extensions для MySQL. В іншому випадку поплавок (подвійна точність може бути непоганою ідеєю) повинен працювати.

Змінити: Схоже, бібліотека GeoRuby включає розширення Rails для роботи з просторовими / ГІС розширеннями для обох згаданих вище баз даних.


Є ще одна більш популярна бібліотека, яку ви можете спробувати. геокодер або checkout github
Денн,

149

Це те, що я використовую:

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

1
Значення повинно бути в межах інтервалу (-180, 180), так? Чому ваша шкала не 7?
таро

17
З документації Карт Google: "Щоб мінімальний обсяг місця для зберігання таблиці був мінімальним, ви можете вказати, що атрибути lat і lng є плаваючими розмірами (10,6)"
Jaco Pretorius

21

Якщо ви не використовуєте просторово базу даних, Карти Google рекомендують використовувати плаваючі розміри (10,6). Це дає вам 6 цифр після десяткової - якщо ви хочете отримати більшу точність, ви можете налаштувати відповідно.


3

Я б запропонував використовувати поплавці, хоча насправді це не так сильно впливає. Поплавці легше робити розрахунки, якщо ви коли-небудь захочете цього в майбутньому.


2

Як правило, ви хочете, щоб Lat / Long зберігався у найбільшому типі поплавків у вас. У деяких широтах (наприклад: поблизу екватора) дуже малі зміни довготи можуть прирівнюватися до великих різниць у плані поверхневої відстані.

Я вважаю, що якщо це поле, на якому ви ніколи не захочете робити математику, ви можете використовувати рядок. Хоча я цього уникну.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.