Какой правильный тип данных для формулы гаверсинуса в mySql

Когда я сохраняю долготу и широту в базе данных, они сохраняются как тип данных Decimal. Долгота сохраняется как 34, а широта сохраняется как 118, это будет работать с формулой гаверсинуса. Я пытаюсь найти места в пределах 20 миль от текущего местоположения пользователя.


person dscrown    schedule 13.07.2017    source источник
comment
Нет. Вам понадобится большая точность   -  person Strawberry    schedule 13.07.2017
comment
Как далеко это будет? Если он находится на расстоянии мили или двух, все в порядке. И будет ли эта формула гаверсинуса работать с этим форматом?   -  person dscrown    schedule 13.07.2017
comment
stackoverflow.com/questions/12504208/   -  person dscrown    schedule 14.07.2017


Ответы (1)


Нет, это точно не сработает.

Один градус широты составляет примерно 70 миль. Это намного больше, чем вы желаете.

Если вы хотите рассчитать расстояния с разрешением 20 миль, вам понадобится хотя бы один десятичный знак для ваших широт и долгот: 0,1 ° широты составляет 7 миль, а 0,1 ° градуса долготы вместе с этим составляет примерно 10 миль ( √2 x 7 = 9,8). Конечно, вам будет лучше с той точностью, которая доступна в ваших исходных данных.

Что, вероятно, здесь пошло не так, так это то, что вы использовали тип DECIMAL для широты и долготы без указания ширины. В MySQL по умолчанию используется DECIMAL(10,0) - десять цифр, все перед десятичной точкой (например, 1234567890.). Вы, вероятно, захотите что-то большее в духе DECIMAL(10,6), что позволяет столбцу хранить десятизначное число с шестью из этих цифр после десятичной точки (например, 1234.123456). Шесть десятичных знаков широты / долготы дают разрешение около 4 дюймов, поэтому нет смысла хранить что-то большее .

person Community    schedule 13.07.2017
comment
Как лучше всего это сделать? Не ищу кода, но какой подход я должен использовать, если десятичный формат не подходит? - person dscrown; 13.07.2017
comment
@dscrown Добавлены примечания к типу DECIMAL. - person ; 13.07.2017