1

我使用下面的sql:

基于http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

SELECT * , 3956 *2 * ASIN( SQRT( POWER( SIN( (
- 36.8812573 - abs( stop_lat ) ) * pi( ) /180 /2 ) , 2 ) + COS( - 36.8812573 * pi( ) /180 ) * COS( abs( stop_lat ) * pi( ) /180 ) * POWER( SIN( ( 174.63832160000004 - stop_lon ) * pi( ) /180 /2 ) , 2 ) )
) AS distance
FROM stops
HAVING distance <100
LIMIT 0 , 30

找到在我当前纬度和经度半径范围内的停靠点。

我正在使用 GTFS 数据,架构如下。(纬度和经度以及最后两列)

01  7106    210 Victoria St     -36.8481990     174.7544900
0002    7108    220 Victoria St     -36.8481710     174.7523800
0003    7110    36 College Hill     -36.8485220     174.7485400
0004    7112    68 College Hill     -36.8479760     174.7466700
0005    7114    2 Jervois Rd    -36.8471670     174.7437800
0006    7116    90 Jervois Rd   -36.8453760     174.7408300
0007    7118    160 Jervois Rd  -36.8453250     174.7373100
0008    7120    206 Jervois Rd  -36.8454990     174.7354500
0009    7122    270 Jervois Rd  -36.8474010     174.7321400
0012    7121    203 Jervois Rd  -36.8473770     174.7319200
0013    7119    165 Jervois Rd  -36.8454100     174.7348400

表结构如下:

在此处输入图像描述

据我所知,查询应该返回一些结果。然而事实并非如此。谁能告诉我我可能会错过什么?

*** 更新 ***********

我注意到我缺少临时输出表名称,所以我现在得到了一些结果。但是,它们从我所在位置的 5000 距离开始。有任何想法吗?

更新的 SQL:

SELECT * , 3956 *2 * ASIN( SQRT( POWER( SIN( (
- 36.8812573 - abs( stop_lat ) ) * pi( ) /180 /2 ) , 2 ) + COS( - 36.8812573 * pi( ) /180 ) * COS( abs( stop_lat ) * pi( ) /180 ) * POWER( SIN( ( 174.63832160000004 - stop_lon ) * pi( ) /180 /2 ) , 2 ) )
) AS distance
FROM stops dest
HAVING distance <5100
ORDER BY distance
LIMIT 10 

谢谢,

4

1 回答 1

2

我怀疑公式是罪魁祸首。即使您从可靠的来源获取它并且在实施过程中没有出错,也可能会出现单元混淆。

  • 有一个错误:永远不需要, “haversine”公式abs中没有这样的东西。在第二种情况下,它不会像偶函数那样改变任何东西,但在第一种情况下,它会改变。cos
于 2015-04-26T01:15:12.767 回答