我有一個表格,其中包含事件和使用MySQL POINT(X,Y) as geocodedLocation
的位置,我試圖對這些數據使用半徑搜索,現在我已經找到了應該在這裏得到的答案 https://gis.stackexchange.com/questions/31628/find-points-within-a-distance-using-mysql。我以前也看到這一點,顯然這是谷歌的答案使用位置服務PHP MySQL查找範圍內的事件Lat/Lng
我有2個地區應拿起事件
Area 1 = `Array ([0] => 51.524074 [1] => -0.1005592)`
Area 2 = `Array ([0] => 53.818391 [1] => -1.4714507)`
我有一些事件
Event 1 `geocodedLocation` = POINT(-1.54907739999999, 53.8007554)
Event 2 `geocodedLocation` = POINT(-0.100559200000021, 51.524074)
是的,我知道點是錯誤的方式,但我沒有建立這個,我只需要使用它。
現在,這是我跑
SELECT a.*
,(
3959 * acos(cos(radians(51.524074)) * cos(radians((
SELECT Y(`geocodedLocation`)
))) * cos(radians((
SELECT X(`geocodedLocation`)
)) - radians(- 0.1005592)) + sin(radians(51.524074)) * sin(radians((
SELECT Y(`geocodedLocation`)
))))
) AS distance
,COUNT(*) AS pagedAmount
FROM Activities a
HAVING distance < 10
ORDER BY a.startTime ASC
正如你可以看到我使用的位置Area 1
查詢,事件Event 2
是在這個位置只是一個小更準確,但由於某些原因查詢沒有提供結果Event 2
刪除COUNT(*)作爲pagedAmound部分和交換選擇X和選擇Y,因爲你的點值是周圍的其他方式,你是好去!第二個事件將顯示距離大於168時 – Markus 2014-09-01 12:51:20
它被顛倒我使用Y作爲緯度和X長。爲什麼要刪除一個計數工作? – 2014-09-01 15:15:24