如何存储用户的位置?

时间:2012-08-16 12:34:21

标签: sql ruby-on-rails ruby geolocation location

我正在开发一个新项目,整天思考&寻找最佳方法,如何将用户的位置保存到数据库。

我需要拯救他们的城市,国家。这有点问题,因为例如对于欧洲人来说,这意味着 city = Berlin country = Germany 。 但对于美国用户来说,它就像 city =洛杉矶 country = California state = USA )。

所以这就是我今天面对的问题。

我在此应用中的目标是根据位置查找城市中的所有用户。并且还找到了他们所在地区的人们,比如15公里/英里。

我计划在RoR,PostgreSQL中实现该应用程序,该应用程序可能会在Heroku上运行。

解决这个“问题”的最佳方法是什么?你能不能给我一些建议,提示,等等?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用 geokit geokit-rails 宝石来实现这一目标。请参阅此处获取文档:https://github.com/imajes/geokit-rails

基本上,它的工作原理如下:您保存用户的地址数据,并使用地理编码服务(例如Google Maps或Yahoo Placefinder)查找该地址并将其映射到空间中的某个点(lat / lng)。然后可以使用这些点来计算距离等。

一个例子:

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')

以及更多信息,请参阅文档...

此示例显示如何使用 geokit gem。这个宝石似乎不再处于积极发展之中。所以也许值得查看地理编码器https://github.com/alexreisner/geocoder