TL; DR
Используйте FLOAT (8,5), если вы не работаете в НАСА / вооруженных силах и не производите навигационные системы для самолетов.
Чтобы полностью ответить на ваш вопрос, вам нужно рассмотреть несколько вещей:
Формат
- градус минут, секунд : 40 ° 26 ′ 46 ″ с.ш. 79 ° 58 ′ 56 ″ з.д.
- градусов десятичных минут : 40 ° 26,767 'N 79 ° 58,933' W
- десятичные градусы 1 : 40,446 ° N 79,982 ° W
- десятичные градусы 2 : -32.60875, 21,27812
- Какой-то другой домашний формат? Никто не запрещает вам создавать собственную систему координат, ориентированную на дом, и сохранять ее как курс и расстояние от вашего дома. Это может иметь смысл для некоторых конкретных проблем, над которыми вы работаете.
Итак, первая часть ответа будет такова: вы можете хранить координаты в формате , который ваше приложение использует , чтобы избежать постоянных преобразований назад и вперед и выполнять более простые запросы SQL.
Скорее всего, вы используете Google Maps или OSM для отображения своих данных, а GMaps используют формат «десятичные градусы 2». Так будет проще хранить координаты в том же формате.
Точность
Тогда вы бы хотели определить необходимую вам точность. Конечно, вы можете хранить координаты типа «-32.608697550570334,21.278081997935146», но вам когда-нибудь приходилось заботиться о миллиметрах при навигации к точке? Если вы не работаете в НАСА и не выполняете спутниковые, ракетные или самолетные траектории, вам должно быть хорошо с точностью до нескольких метров.
Обычно используемый формат состоит из 5 цифр после точек, что дает точность 50 см.
Пример : расстояние между X, X 21,278081 8 и X, составляет 1 см, 21,278081 9 . Таким образом, 7 цифр после точки дают вам точность 1/2 дюйма, а 5 цифр после точки дают точность 1/2 метра (поскольку минимальное расстояние между точками составляет 1 метр, поэтому ошибка округления не может превышать половины). Для большинства гражданских целей этого должно быть достаточно.
Формат
градусов десятичных минут (40 ° 26,767 'N 79 ° 58,933' W) дает вам точно такую же точность, как 5 цифр после точки
Пространственное хранение
Если вы выбрали десятичный формат, то ваша координата - пара (-32.60875, 21.27812). Очевидно, 2 x (1 бит для знака, 2 цифры для степеней и 5 цифр для показателя степени) будет достаточно.
Так что здесь я бы хотел поддержать Alix Axel из комментариев о том, что предложение Google сохранить его в FLOAT (10,6) действительно лишнее, потому что вам не нужны 4 цифры для основной части (поскольку знак отделен и широта ограничена до 90, а долгота ограничена до 180). Вы можете легко использовать FLOAT (8,5) для точности 1/2 м или FLOAT (9,6) для точности 50/2 см. Или вы можете даже хранить lat и long в отдельных типах, потому что FLOAT (7,5) достаточно для lat. См. MySQL типы с плавающей точкой ссылка . Любой из них будет как обычный FLOAT и в любом случае будет равен 4 байта.
Обычно в настоящее время пространство не является проблемой, но если вы по какой-то причине действительно хотите оптимизировать хранилище (Отказ от ответственности: не выполняйте предварительную оптимизацию), вы можете сжать lat (не более 91 000 значений + знак) + long (не более 181 000 значений + знак) до 21 бита, что значительно меньше , чем 2xFLOAT (8 байт == 64 бита)