我有一個網站顯示來自某個城市的帖子。我正考慮從用戶的位置(在這種情況下爲10公里)的城市變爲半徑。選擇10km半徑範圍內的緯度經度值的行?
我不知道如何使用半徑查詢。我只能想到用兩個條件做一個查詢並得到一個正方形。例如:
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
是否可以從某個位置選擇半徑爲X公里/英里的行?
我有一個網站顯示來自某個城市的帖子。我正考慮從用戶的位置(在這種情況下爲10公里)的城市變爲半徑。選擇10km半徑範圍內的緯度經度值的行?
我不知道如何使用半徑查詢。我只能想到用兩個條件做一個查詢並得到一個正方形。例如:
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
是否可以從某個位置選擇半徑爲X公里/英里的行?
通常,您可以在任何情況下使用WHERE
查詢。因此,假設你有一個函數distance()
可以計算兩個地理點之間的距離,你可以這樣做:
SELECT fields
FROM points
WHERE distance(lat, lon, city_lat, city_lon) <= 10
其中city_lat
和city_lon
是城市中心的位置。
PostgreSQL包含一個名爲earthdistance()
的附加函數,這將有所幫助。
聽起來可行。只是關於功能的問題。我只是把它寫在查詢之上,就像一個普通的PHP函數那樣呢?或者我必須做一些不同的事情才能使它與查詢一起運行?我會在一分鐘內接受 – lisovaccaro
不,這個函數需要被你的數據庫訪問(你的PHP腳本中的函數沒有),這意味着你需要使用['CREATE FUNCTION'](http:// dev。 mysql.com/doc/refman/5.0/en/create-function.html)來編寫你自己的。 –
[這](http://stackoverflow.com/questions/5492750/efficient-sorted-bounding-box-query)問題可能對你有價值 - 不是MySQL,但這個想法仍然成立。 –
你有計算兩點之間距離的公式嗎?這將有助於確定它是否可以在SQL中完成。 –
我認爲每緯度或經度點約爲111公里。因此,使用畢達哥拉斯函數將是'(lat * 111)^ 2 +(lon * 111)^ 2 = distance^2'。但我不確定如何「創建功能」。 – lisovaccaro