查找与其他用户的距离的问题Sql Server 2005-Haversine
|
我有一个与用户相关的表,我需要根据纬度,经度找到最近的用户。我也需要距离。我一直在努力使用haversine公式和替代方法,但是已经遇到了一些错误。
让我们举个例子,我在马来西亚吉隆坡使用经纬度(大约为3.2、102)。
使用毕达哥拉斯:
SELECT top 10 *,
SQRT(SQUARE(ABS(latitude - 3.2)) + SQUARE(ABS(longitude - 102))) AS distance
FROM lfuser
ORDER BY distance
它给我“正确”的结果(接近该点的用户)。但是我无法从中得出距离(以KM为单位),我知道这并不完全正确。因此,我尝试使用Haversine:
SELECT TOP 10 *,
ROUND(2 * ASIN(SQRT(POWER(SIN(((3.2 / 180) * PI()
- (latitude / 180) * PI()) / 2) ,2) + COS((3.2 / 180) * PI())
* COS((latitude / 180) * PI()) * POWER(SIN(((102 / 180) * PI()
- (longitude / 180) * PI()) / 2), 2))) * 6367, 4) AS distance
FROM lfuser
ORDER BY distance
奇怪的是,这给了我其他地方的用户。实际上,排名前1的结果是加纳的lat = 5.55和long = -0.20的用户。
这让我发疯了……我当然可以通过将毕达哥拉斯的结果乘以110 kms来计算一个近似的距离,但是我想要更正确的结果。
我希望有人指出什么地方出了问题。
请不要发布指向hasversine公式等不同实现方式的链接。我已经看了两天了。
没有找到相关结果
已邀请:
2 个回复
豆兢
,所以我尝试转换程序以适应您的情况。让我知道工作是否顺利 我还认为正确的吉隆坡经度和纬度是
希望能帮助到你
窝头菊