2011-07-03 58 views
4

獲取最近的地方我有一個表hotspots使用經緯度

id name date 
1 foo 2011-06-15 15:10:34 
2 bar 2011-07-02 16:45:18 

和一張桌子locations

hotspotid zipcode latitude longitude 
1   90001 xxxxx  xxxxx 
2   45802 xxxxx  xxxxx 

我怎樣才能使用列出熱點附近的一個特定的緯度和經度英里極限一個SQL查詢?

P.S.我想要一個純粹的SQL解決方案,但如果需要的話,PHP是可以的。

感謝

+0

不要喲你有距離表嗎?如果沒有,你需要創建一個。 –

+0

例如,有一個緯度/經度表[這裏](http://www.populardata.com/downloads.html)。 –

+0

詳細的博客:http:// sforsuresh。在/尋找最近的位置使用緯度經度/ –

回答

5

首先,您需要每個熱點的地理位置,理想情況下使用經度和緯度。您可以使用Google Geocoding API遍歷每條記錄並存儲經緯度。

然後你可以match nearby hotspots with this SQL query和按距離排序。

希望有所幫助。

+0

我忘了把經緯度字段放在那裏。我有這些。 – Ryan

+1

然後,只需使用SQL查詢來計算經緯度和距離之間的距離,你應該全部設置:) – Tak

+0

@Tak我看到了,感謝您的鏈接,我堅持加入與熱點的位置按順序使用該查詢:/ – Ryan

0

只是瀏覽我發現this link雖然我不知道這是相當你在找什麼。

這裏是一個更好地描述圖書館的文章。這不是一個基於SQl的答案,儘管您可以使用lats/longs,將它們轉儲到數據庫並編寫一個距離查詢。

0

對於純SQL的解決方案,你可以看看數據庫,如

http://www.zip-codes.com

如果你正在尋找一個免費的解決方案,我以前的IP地址數據庫中使用的maxminds,但他們的郵政編碼準確度非常差。此外,maxminds數據庫旨在從IP地址查找位置。

如果您想查找郵政編碼的位置,則可以註冊Google Maps API密鑰並使用其地理位置查找服務。該解決方案很可能需要PHP或JavaScript來執行查找。但是這項服務是有據可查的,並且在我的經驗中非常有效。

http://code.google.com/apis/maps/documentation/javascript/basics.html#Geolocation

0

你正在計算是2雙lat和長值之間的「大圓距離」。

這可以在SQL來完成,特別是如果你想拉出的計算和計算時,

0

請嘗試一下本作最近的位置

SELECT ((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS `distance` 
FROM `members` 
HAVING `distance`<=’10’ 
ORDER BY `distance` ASC