1

我正在尝试使用 Haversine 公式来定位我当前位置 1 英里范围内的所有巴士站。我有一个 MySQL DB 表,其中包含 5500 个公交车站的纬度/经度位置,并且正在使用以下 SQL 查询:

"SELECT id, 
( 3959 * acos( cos( radians(37.865971) ) * cos( radians( stopLat ) ) * cos( radians( stopLon ) - radians(-122.283775) ) + sin( radians(37) ) * sin( radians( stopLat ) ) ) ) 
AS distance FROM stops HAVING distance < 1 ORDER BY distance";`"

stops是数据库表的名称。

stopLat是列出纬度的列的名称。

stopLon是列出经度的列的名称。

我正在使用的位置的纬度/经度是 37.865971,-122.283775。

我正在从 Java 程序中执行此操作。该程序运行成功,但ResultSet即使我确定在输入位置的一英里内有 50 多个公交车站,我也空空如也。

我哪里错了?

编辑:我注意到当我更改1为超过 500 时,它会返回整个结果集。此外,它告诉我它们都在 497-480 英里之外,这表明问题(正如我所怀疑的)在数学上,即在陈述本身中。

编辑 - 已解决 (请参阅下面我自己的答案)

4

1 回答 1

1

这个表达式:

sin( radians(37) )

不够精确。将其更改为:

sin( radians(37.865971) )

给出预期的结果。

于 2013-05-02T03:22:42.153 回答