【发布时间】:2017-12-17 14:03:44
【问题描述】:
当我将经度和纬度保存到数据库中时,它被存储为十进制数据类型。 经度保存为34,纬度保存为118 这是否适用于haversine公式。我正在尝试查找用户当前位置 20 英里范围内的位置。
【问题讨论】:
-
没有。您将需要更高的精度
-
还有多远?如果它离开一两英里就可以了。这个haversine公式是否适用于这种格式?
当我将经度和纬度保存到数据库中时,它被存储为十进制数据类型。 经度保存为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,所以存储更多内容没有意义。
【讨论】: