Сколько значащих цифр я должен хранить в своей базе данных для координаты GPS?


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

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

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

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

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

8   37   2009-12-22 19:29:19

8 ответов:

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

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

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

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

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

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

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

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

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

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

4-значный deg.mm мм / 1000 также распространено.

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

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

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