mySql 中 haversine 公式的正确数据类型是什么

What is the correct data type for haversine formula in mySql

当我将经度和纬度保存到数据库中时,它存储为十进制数据类型。 经度保存为34,纬度保存为118 这将与 haversine 公式一起使用。我正在尝试查找用户当前位置 20 英里以内的位置。

不,那肯定不行。

一个纬度大约是 70 英里。这比你想要的精度要大得多。

如果你想计算分辨率为 20 英里的距离,你的纬度和经度至少需要一位小数 - 0.1° 纬度是 7 英里,0.1° 经度加上它大约为 10 英里 (√2 x 7 = 9.8)。当然,如果源数据中可用的精度尽可能高,您会过得更好。

这里可能出了问题,因为您在没有指定宽度的情况下使用了 DECIMAL 类型作为纬度和经度。在 MySQL 中,这默认为 DECIMAL(10,0) -- 十位数字,所有数字都在小数位之前(例如,1234567890.)。您可能想要的是更多类似于 DECIMAL(10,6) 的内容,它允许该列存储一个十位数字,其中六位数字位于小数点后(例如,1234.123456)。 Six decimal places of latitude/longitude gives you a resolution of about 4 inches,所以没有必要再存储更多了。