Сколько значащих цифр я должен хранить в своей базе данных для GPS-координаты? - PullRequest
38 голосов
/ 22 декабря 2009

В моей базе данных MySQL есть координаты долготы и широты (данные GPS).

В настоящее время он хранится как:

column     type
------------------------
geolat     decimal(10,6)
geolng     decimal(10,6)

Вопрос: Действительно ли мне нужен тип данных размером decimal(10,6) для правильного хранения данных координат?

Поскольку у меня есть объединенный индекс по долготе и широте, этот размер индекса огромен. Если бы я мог уменьшить его, ничего не ставя под угрозу, это было бы здорово.

Ответы [ 8 ]

35 голосов
/ 22 декабря 2009

WGS84 данные обычно задаются как координаты в полностью десятичной записи, обычно с 5 десятичными знаками, поэтому для широты (от -90 до +90) вы можете использовать десятичную (7, 5) (-90.00000 до 90.00000), для долготы вы можете использовать десятичную (8, 5) (от -180.00000 до 180.00000).

.00001 дает точность около метра на экваторе

Тип данных DECIMAL / NUMERIC - это масштабированное целое число с фиксированной точностью , и всегда доступны как положительные, так и отрицательные части диапазона - они не влияют на точность или масштаб (для этого, очевидно, требуется память) , но у вас нет выбора для DECIMAL)

4 голосов
/ 22 декабря 2009

Я всегда работал с шестью цифрами после десятичной дроби. Раньше я выполнял ГИС-работу по военному контракту, и этого было достаточно.

3 голосов
/ 22 декабря 2009

Имейте в виду, что данные легче сократить, чем увеличить. Обычно повышение точности данных невозможно даже без переизмеривания. И переоценка приходит за плату. Не зная ничего о вашей ситуации или отрасли, я бы сказал, собирать как можно больше данных / специфичности.

Данные, которые вы фактически используете, могут быть отобраны из этого набора. Если вам в конечном итоге понадобится более высокая степень конкретности, вы всегда можете пересчитать без перерасчета.

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

1 голос
/ 22 декабря 2009

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

0 голосов
/ 31 марта 2013

Если все координаты находятся в определенной области, установите некоторую центральную точку (то есть средние текущие точки и округления, чтобы получить число, которое вы можете произнести вслух), а затем сохраните координаты относительно этой точки. Таким образом, вы, вероятно, можете пропустить первые 2-4 наиболее значимых цифры, что дает большую экономию. Но не забудьте обработать эти данные только через Class или VIEW, которые возвращают истинные координаты WGS84.

0 голосов
/ 22 декабря 2009

Вы также можете попытаться сохранить (и / или работать с) ваши координаты в разных единицах. Один проект, над которым я работал, все наши координаты были в миллисекундах и сохранялись как длинные (может быть, целые, это было пару лет). Это было сделано частично для скорости и для места для хранения (это была встроенная система). Но та же самая логика могла бы применяться здесь.

0 голосов
/ 22 декабря 2009

Обычная GGA-пропускная способность в выходном сигнале NMEA Lat / lon составляет всего 3 десятичных знака с разрешением примерно 10 м на экваторе. Некоторые бренды добавляют дополнительную цифру, чтобы дать 1 м.

4 цифры град. Мм мм / 1000 также распространены.

Если вы используете высокоточный RTK-GPS, вам может понадобиться больше мест для получения мм

0 голосов
/ 22 декабря 2009

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

...