2011-11-01 73 views
0

我有一個簡單的要求:顯示附近的地方,按距離當前用戶的升序排列。如何搜索附近的地方,給出一對使用谷歌地圖的緯度,經度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,但如果任何其他組合更快,我可以更改技術堆棧。 (對此也有建議)

回答

0

我想說盡可能在服務器端做。我不確定爲什麼你認爲這個查詢「意味着我的服務器將註定要進行所有的計算」。我想你也可以進行分類。您只需根據距用戶的實際距離爲查詢添加一個臨時列。我不知道公式,但我認爲它在SQL中是可行的。

+0

如果所有的計算都在服務器端爲每個用戶的請求做了詳細說明,服務器的負載會增加成倍。我想將距離計算和排序部分委託給客戶端,以節省服務器資源 – jerrymouse

相關問題