我正在尝试使用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是DB表的名称。
stopLat是列出纬度的列的名称。
stopLon是列出经度的列的名称。
我使用的位置的拉长是37.865971,-122.283775。
我是用Java程序来做这个的。程序运行成功,但我的ResultSet返回空,即使我确信有50+巴士站在一英里内的位置被输入。
我哪里出问题了?
编辑:--我注意到当我将1更改为任何超过500的内容时,它会返回整个结果集。此外,它告诉我,它们都在497至480英里之外,这表明问题是(如我所怀疑的)在数学,即在语句本身。
编辑解决了的(见下面的答案)
发布于 2013-05-02 03:22:42
这句话:
sin( radians(37) )不够精确。改为:
sin( radians(37.865971) )给出了预期的结果。
https://stackoverflow.com/questions/16329620
复制相似问题