我正在尝试使用 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 英里之外,这表明问题(正如我所怀疑的)在数学上,即在陈述本身中。
编辑 - 已解决 (请参阅下面我自己的答案)