我有一個簡單的要求:顯示附近的地方,按距離當前用戶的升序排列。如何搜索附近的地方,給出一對使用谷歌地圖的緯度,經度apis
的places
表:
CREATE TABLE places (
id int(11) NOT NULL ,
category varchar(200) ,
name varchar(200) ,
address varchar(2000) ,
city varchar(100) ,
state varchar(100) ,
zipcode varchar(20) ,
country varchar(100) ,
latitude decimal(12,9) ,
longitude decimal(12,9) ,
phone varchar(200) ,
PRIMARY KEY (id)
)
我請求用戶允許瀏覽器訪問自己的位置(或者找appox位置使用IP)。有他的緯度,經度,地址,城市和國家,我有2個選項來找到附近的地方:
1)計算最大,最大範圍的緯度,lng可以說從用戶的座標5-10英里半徑。然後做一個:
SELECT * FROM places
WHERE (latitude between MINLAT and MAXLAT)
and (longitude between MINLNG and MAXLNG)
and category = CATEGORY
這可能意味着我的服務器將註定與所有的計算。另一個問題是我無法根據用戶的實際距離對結果進行排序。
2)另一種選擇是選擇與用戶相同的城市中的所有地方。然後,在客戶端,使用geo api的javascript函數計算用戶和每個地點之間的距離,並按升序顯示。缺點是服務器需要將城市中的所有places
發送到客戶端(可能是0.1k到10k之間的任何值)
考慮到所有折衷,哪個最佳選擇?有沒有其他的選擇?
計劃使用LAMP,但如果任何其他組合更快,我可以更改技術堆棧。 (對此也有建議)
如果所有的計算都在服務器端爲每個用戶的請求做了詳細說明,服務器的負載會增加成倍。我想將距離計算和排序部分委託給客戶端,以節省服務器資源 – jerrymouse