MySQL хранит широту, долготу с высокой точностью уровня - PullRequest
3 голосов
/ 11 февраля 2012

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

FLOAT (10, 6)

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

Ответы [ 2 ]

4 голосов
/ 11 февраля 2012

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

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

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

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

Вот что Рэндалл Манро (XKCD) использует для точности геоординат:

enter image description here

2 голосов
/ 11 февраля 2012

Вы хотите посмотреть на использование пространственных расширений ... Проверьте эту ссылку

MYSQL и использование пространственных расширений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...