2012-07-25 91 views
0

我們目前有一個網站,可以按位置搜索對象。我們在我們國家有一個搜索框和一個國家的下拉菜單。每個對象都與一個狀態有關係。基於位置的搜索

我們希望將此網站擴大到其他國家。我們的選擇似乎是:

1 /對於每個我們想要進入的國家,我們都需要一個州名單和可能的郵政編碼。這些對象與狀態和郵政編碼相關聯,並在搜索框旁邊提供下拉菜單。

2將經度和緯度關聯到每個對象,並讓google api返回用戶搜索時輸入的地址的經度和緯度。然後找到落在搜索地址的long/lat的某個半徑範圍內的對象。

選項1表現良好,但受到限制,因爲在進入每個國家(獲取州/郵政編碼清單)之前,我們必須做很多工作。

選項2看起來是最有彈性的,進入一個新的國家沒有限制。但是,如果做得不好,它可能表現不佳。你將如何避免搜索表中的所有對象,以找出長/經緯度與搜索地址的長/半徑的半徑之差?

我們喜歡www.skillpages.com的工作原理。非常快速和準確的搜索,這是我們想要複製,如果我們選擇選項2.

任何意見如何最好地創建一個準確和彈性的基於位置的搜索算法將不勝感激。

回答

0

如果您想允許用戶搜索x英里範圍內的物品,選項2聽起來像是最好的選擇。不應該有太多數據庫的開銷,如果你設置索引存儲的每個項目

假設PHP/MySQL的基於類似的緯度/經度列:

$radius = 0.15; // Would be calculated based on radius of the search 
$user_lat = -0.134239; // Latitude of User Searching 
$user_lon = 51.510238; // Longitude of User Searching 

$query = mysql_query("SELECT * FROM `items` WHERE `lng`<'". ($user_lon + $radius) ."' AND `lng`>'". ($user_lon - $radius) ."' AND `lat`>'". ($user_lat - $radius) ."' AND `lat`<'". ($user_lat + $radius) ."'"); 
+0

感謝您的回答。我一直在看www.skillpages.com。它似乎自動知道要搜索的半徑。一個特定的地址搜索一個小半徑,如果你搜索整個國家,半徑似乎根本沒有被使用,因爲該國的所有技能都被返回。任何想法他們如何管理? – Tommy 2012-07-25 23:32:57

+0

這不是我熟悉的網站,但猜測他們要麼將國家以及添加到數據庫的每條記錄的lng/lat存儲起來,然後根據您想要的搜索準確度進行不同的查詢。或者,他們可以使用某種類型的API(或使用本地數據集)來指定每個國家的緯度/經度邊界並將其用於查詢,但並非所有國家都有直接的邊界,可能會變得非常複雜那是準確的。 – 2012-07-26 00:10:48

+0

好的,謝謝你的幫助,我猜想國家和長/拉特是做的方式 – Tommy 2012-07-26 14:33:48

0

考慮將全國劃分成多個區域,次區域,城市,地方。儘可能多的水平。不是實時運行api請求,而是存儲城市中的地點之間的距離(比如說,一個城市有100個地點,這將導致100城市的100 X100地點矩陣/表格)。

根據用戶輸入的相應地點顯示結果,城市中的所有結果可能由用戶的地點與所有其他地點之間的距離決定。有點像改變市中心到用戶的位置。

但是,這將導致個人的城市位置表,如果你超越了一些城市,我只能推測會出現問題。

我想爲我的網站做同樣的事情。

考慮如果將距離數據存儲在XML或位圖(這些在社交網站上創建社交圖表時使用了很多)可以節省性能。

根據用戶數量的不同,實時調用api +距離計算應花費大量時間。無論如何,谷歌API調用也是有限的。

+0

感謝您的全面解答。我會考慮實施這個解決方案,並回答我遇到的任何問題 – Tommy 2012-08-04 13:27:14