2012-08-16 38 views
1

我正在研究一個新的項目,並且整天想着&尋找最好的方法,如何將用戶的位置保存到數據庫。如何存儲用戶的位置?

我需要保存他們的城市,國家。這裏有點問題,因爲例如對於歐洲人來說這意味着城市=柏林,country =德國。 但對美國用戶來說,它就像城市=洛杉磯,country = Californiastate = USA)。

所以這是我今天面臨的問題。

我在這個應用程序的目標是根據他們的位置找到城市中的所有用戶。還可以找到那些在15公里/英里範圍內的人。

我打算在RoR,PostgreSQL中實現該應用程序,該應用程序可能會在Heroku上運行。

解決這個「問題」的最好方法是什麼?你能給我一些建議,提示,不管?

謝謝

+0

嗯,HTML5地理位置+ AJAX或地理編碼器+ IP查找 – apneadiving 2012-08-16 12:41:39

+0

,可以儲存緯度/經度+城市細節 – apneadiving 2012-08-16 12:42:28

+0

你可以給我請了怎麼辦任何實例那? – user984621 2012-08-16 12:56:20

回答

2

可以使用geokitgeokit護欄寶石來實現這一目標。看到這裏的文檔:https://github.com/imajes/geokit-rails

基本上,它的工作原理是這樣的:您保存用戶的地址數據,並使用地理編碼服務(例如Google地圖)查找並映射到空間點(緯度/經度)或雅虎Placefinder)。然後,這些積分可用於計算距離等

一個例子:

class User < ActiveRecord::Base 
    # has the following db fields: 
    # - city 
    # - state 
    # - country 
    # - latitude 
    # - longitude 

    acts_as_mappable :default_units  => :miles, 
        :default_formula  => :sphere, 
        :lat_column_name  => :latitude, 
        :lng_column_name  => :longitude, 
        :auto_geocode  => {:field => :full_address} 

    def full_address 
    [city, state, country].reject(&:blank).join(', ') 
    end 
end 

然後你就可以做到以下幾點:

# find all users in a city (this has nothing to do with geokit but is just a normal db lookup) 
User.where(:city => 'New York') 

# find all users that are within X miles of a place 
User.find_within(300, 'Denver') 

得多,只看到文檔...

此示例說明如何使用gemit gemit gem。這顆寶石似乎不再處於積極的發展之中。因此,也許這將是歡顏退房地理編碼https://github.com/alexreisner/geocoder