點:基於http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL地理SQL找到使用下面的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
HAVING distance <100
LIMIT 0 , 30
要看到的是我當前的緯度和經度的半徑內停止。
我正在使用GTFS數據,模式如下。 (lat和lon和最後兩列)
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
感謝,
請詳細說明所用的配方。有相當多的魔法數字,單位沒有指定。 –
順便說一句,指定你的當前位置爲幻數也不是一個好主意(更不用說爲了理解的目的)。 –
@ivan_pozdeev公式參考鏈接 – Yonkee