2012-01-23 103 views
2

我有一個網站顯示來自某個城市的帖子。我正考慮從用戶的位置(在這種情況下爲10公里)的城市變爲半徑。選擇10km半徑範圍內的緯度經度值的行?

我不知道如何使用半徑查詢。我只能想到用兩個條件做一個查詢並得到一個正方形。例如:

SELECT fields 
FROM points 
WHERE lat BETWEEN LAT1 AND LAT2 
AND lon BETWEEN LON1 AND LON2 

是否可以從某個位置選擇半徑爲X公里/英里的行?

+0

[這](http://stackoverflow.com/questions/5492750/efficient-sorted-bounding-box-query)問題可能對你有價值 - 不是MySQL,但這個想法仍然成立。 –

+0

你有計算兩點之間距離的公式嗎?這將有助於確定它是否可以在SQL中完成。 –

+0

我認爲每緯度或經度點約爲111公里。因此,使用畢達哥拉斯函數將是'(lat * 111)^ 2 +(lon * 111)^ 2 = distance^2'。但我不確定如何「創建功能」。 – lisovaccaro

回答

1

通常,您可以在任何情況下使用WHERE查詢。因此,假設你有一個函數distance()可以計算兩個地理點之間的距離,你可以這樣做:

SELECT fields 
FROM points 
WHERE distance(lat, lon, city_lat, city_lon) <= 10 

其中city_latcity_lon是城市中心的位置。

PostgreSQL包含一個名爲earthdistance()的附加函數,這將有所幫助。

+0

聽起來可行。只是關於功能的問題。我只是把它寫在查詢之上,就像一個普通的PHP函數那樣呢?或者我必須做一些不同的事情才能使它與查詢一起運行?我會在一分鐘內接受 – lisovaccaro

+0

不,這個函數需要被你的數據庫訪問(你的PHP腳本中的函數沒有),這意味着你需要使用['CREATE FUNCTION'](http:// dev。 mysql.com/doc/refman/5.0/en/create-function.html)來編寫你自己的。 –

相關問題