Типи даних для зберігання lng / lat в MySQL


14

Я зберігаю великий список точок lnt / lat у базі даних MySQL. На даний момент це прогнозовані точки для Великобританії в М, але в перспективі я хотів би переконатися, що я можу зберігати координати точок у всьому світі. Який тип даних я повинен використовувати?

Я почав використовувати decimal(18,12), але не був впевнений, чи потрібна ця точність, чи я можу просто використовувати float. Я включив свій код, якщо є щось інше, про що я повинен розглянути:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

Я зовсім новачок у SQL, тому я не впевнений, чи є тип даних важливим під час запуску запиту. Я припускав, що загальна пам'ять буде змінюватися залежно від типу змінної. Чи є користь використання просторової бази даних над базовою базою даних MySQL для цього типу робіт?

Відповіді:


16

Це питання також задавали на StackOverlow .

Верхня відповідь пропонує запропоновані просторові розширення MySQL . Є навантаження посилань на роботи з цими розширеннями тут .

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

У прикладі коду від Google, який відображає точки на карті, вони зазначають:

Створюючи таблицю MySQL, ви хочете звернути особливу увагу на атрибути lat та lng. Завдяки поточним можливостям масштабування Карт Google, вам знадобиться лише 6 цифр точності після десяткової.

Щоб мінімізувати необхідний для нашої таблиці місце для зберігання, ви можете вказати, що атрибути lat та lng є плаваючими розмірами (10,6). Це дозволить полям зберігати 6 цифр після десяткової, плюс до 4 цифр перед десятковою, наприклад, -123,456789 градусів

Я б не переймався різницею в роботі між числовими типами. Пристойні показники матимуть набагато більший ефект.


+1 за гарну відповідь! Це я б сказав і зробив.
OptimizePrime

Дякую за відповідь - я прочитав документацію про просторові розширення MySQL, але як почати їх використовувати? У мене просто є MySQL DB за замовчуванням на GoDaddy; Я не знаю, з чого мені почати.
djq


1
І відповідь оновлена ​​за посиланням на більше посилань
geographika

Чому 4 цілі цифри?
Алікс Аксель

6

Якщо ви не пов’язані з MySQL з якоїсь іншої причини, ви дійсно повинні розглянути можливість використання просторово включеної бази даних, наприклад, постгігів, у яких є об'єкт Point (і Line, Polygon тощо) для обробки цих деталей для вас. Ви також отримаєте підтримку проекцій, коли внесете ці зміни до всього світу.

2019 : Для таких людей, як я, які також не читають коментарів - MySQL підтримує типи просторових даних, нібито повільніше, без доказів.


Примітка. Для нових, хто читає вище, MySql 5.7+ тепер працює з просторовими індексами.
HopeKing

але це все ще повільно
Ян Тертон

Не могли б ви допомогти з ресурсами, які показують, як повільно? Я розглядаю можливість використовувати його в проекті з меншими мільйонами записів. Спасибі.
HopeKing

особистий досвід немає публічних даних. Занадто багато проблем з неправильною геометрією тощо, що порушує речі
Іан Тертон

Спасибі. Моя потреба - це просто відстань між точками на основі записів бази даних (і ніяких складних вимог, як Polygon) - отже, напевно, безпечно використовувати mysql.
HopeKing
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.