Когда я сохраняю долготу и широту в базе данных, они сохраняются как тип данных Decimal. Долгота сохраняется как 34, а широта сохраняется как 118, это будет работать с формулой гаверсинуса. Я пытаюсь найти места в пределах 20 миль от текущего местоположения пользователя.
Какой правильный тип данных для формулы гаверсинуса в mySql
Ответы (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 дюймов, поэтому нет смысла хранить что-то большее .