我有問題試圖通過SQL語句向用戶返回最近的位置。爲了測試我使用的是完全相同的座標,這裏是我有:測量兩個緯度/經度點之間的距離
SQL:
SELECT `companies`.`customerName` ,
(3959 *
ACOS(
COS(
RADIANS(37.367485) * COS(RADIANS(`locations`.`gps_lat`)) *
COS(
RADIANS(`locations`.`gps_lng`) - RADIANS(-77.399994) +
SIN(RADIANS(37.367485)) * SIN(RADIANS(`locations`.`gps_lat`))
)
)
)
)
AS `distance`
FROM `locations`
JOIN `companies` ON `locations`.`co_id`
HAVING `distance` > 25
ORDER BY distance
LIMIT 0 , 10
結果:
| customerName | distance |
| SOME COMPANY | 1914.41747964854 |
locations
表值:
gps_lat | gps_lng
37.367485 | -77.399994
我使用的示例從Google,我查了公式幾次,我似乎無法拿出我哪裏錯了。任何幫助表示讚賞。
編輯:
由於人們似乎對我有些困惑知道我在做什麼:
的>
被取代,以產生一個結果,1914
明顯大於25
。
此應用程序將用戶座標從Android應用程序傳遞到我們的Web服務器。緯度和經度將從$_GET
值拉出並從公司在我們的網頁服務器MYSQL數據庫交叉引用。
上面的語法只是我檢查MySQL工作臺我的SQL語句。顯然,我正在尋找一個零值結果。
如果你想在最近的地方,爲什麼你限制它「距離> 25「?我做了 –
,返回零結果。注意它給我的距離高於 – jnthnjns
根據您使用的RDBMS,可能會有相當簡單(和更快)的方式來執行此操作。例如:[MySQL](http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html),[SQL Server](http://msdn.microsoft.com/en-us/ library/bb933876%28v = sql.105%29.aspx),[PostgreSQL](http://postgis.refractions.net/)。 –