2012-02-10 4 views
3

В настоящее время я храню значения lat/lng в базе данных с точностью до 6 знаков после запятой. Однако некоторые значения, которые мне нужно сохранить в этой базе данных, имеют 12-значную десятичную точность. Моя база данных в настоящее время устанавливает LAT и длинные АстамШирота MySQL, долгота с высокой степенью точности

FLOAT (10, 6)

Можно ли установить тип хранения, так что он может работать либо 6 десятичный или 12 десятичных широчайшими значений/LNG?

+0

Положение лат/лон, обозначенное 12 знаками после запятой, соответствует точности микрометра. Мне интересно, какое приложение должно описывать положение на земле до уровня микрометра? – TreyA

ответ

4

Используйте тип DOUBLE данных.

Вы должны иметь возможность неразрывно изменять существующую таблицу, чтобы работать таким образом. Например,

alter table `mytable` 
    change `LAT` `LAT` double NULL , 
    change `LONG` `LONG` double NULL 

Но будьте осторожны, чтобы не преувеличивать точность данных. Эпсилон обычного float 32-битное значение lat/long с плавающей запятой (наилучшая возможная точность) составляет несколько сантиметров на земле. Эпсилон double - это крошечное крошечное расстояние. Это почти немыслимо, что ваша lat/long информация является точной. И если это так, это действительно не имеет значения, если вы не используете сложные картографические проекции: типичная формула хаверсина для вычисления расстояний предполагает, что земля - ​​идеальная сфера. Это не так. Экваториальная выпуклость земли достаточно велика, чтобы сделать сферическое предположение разбитым для расстояний точнее, чем, опять же, несколько сантиметров.

+1

Примечание: когда Олли утверждает, что максимально возможная точность для поплавка составляет несколько сантиметров, это справедливо только для точки lat/lon 0,0 (где первый меридиан встречается с экватором). В США невозможно описать позицию с точностью до сантиметров с поплавком. Лучше всего использовать double для lat/lon. – TreyA

Смежные вопросы