我正在开发一个新项目,整天思考&寻找最佳方法,如何将用户的位置保存到数据库。
我需要拯救他们的城市,国家。这有点问题,因为例如对于欧洲人来说,这意味着 city = Berlin , country = Germany 。 但对于美国用户来说,它就像 city =洛杉矶, country = California ( state = USA )。
所以这就是我今天面对的问题。
我在此应用中的目标是根据位置查找城市中的所有用户。并且还找到了他们所在地区的人们,比如15公里/英里。
我计划在RoR,PostgreSQL中实现该应用程序,该应用程序可能会在Heroku上运行。
解决这个“问题”的最佳方法是什么?你能不能给我一些建议,提示,等等?
谢谢
答案 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