【问题标题】:What is the correct data type for haversine formula in mySqlmySql中haversine公式的正确数据类型是什么
【发布时间】:2017-12-17 14:03:44
【问题描述】:

当我将经度和纬度保存到数据库中时,它被存储为十进制数据类型。 经度保存为34,纬度保存为118 这是否适用于haversine公式。我正在尝试查找用户当前位置 20 英里范围内的位置。

【问题讨论】:

标签: php mysql pdo haversine


【解决方案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)。 Six decimal places of latitude/longitude gives you a resolution of about 4 inches,所以存储更多内容没有意义。

【讨论】:

  • 最好的方法是什么?不是在寻找代码,但是如果十进制格式不正确,我应该采取什么方法?
  • @dscrown 添加了关于 DECIMAL 类型的一些注释。
猜你喜欢
  • 2013-11-04
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多