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

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

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

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

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

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

8 ответов


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

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

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


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


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

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

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


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


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


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

4-значный град.мм мм / 1000 также общее.

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


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


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