Ruby Geocoder宝石查找邮政编码



我使用ruby geocoder gem按位置进行搜索。我想将搜索限制在已经正式启动的地点。如果有人按zip进行搜索,使用正则表达式很容易。但如果有人按城市搜索,我需要将城市转换为邮政编码,检查我的邮政编码表,如果是,则返回搜索结果。

地理编码器api有一个用于反向地理编码的部分:

reverse_geocoded_by :latitude, :longitude do |obj,results|
  if geo = results.first
    obj.city    = geo.city
    obj.zipcode = geo.postal_code
    obj.country = geo.country_code
  end
end
after_validation :reverse_geocode

这显然只是为了在模型中使用而构建的。但我试图在我的控制器中使用它,但obj.zipcode根本不起作用。Geocoder.search('sanjose,ca')似乎返回了我需要的东西,我只是不知道如何到达它。这是我的位置:

  if params[:search].present?
#       coords = Geocoder.coordinates(params[:search])
    zip = Geocoder.search(params[:search])
    if Zip.where(:zip => (params[zip.zipcode]), :launch => true).exists?
      addresses = Address.near(params[:search], 25, :order => :distance)
      @profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil?
      @title = "Addresses Near " + (params[:search]).to_s
    else
      if Zip.where(:zip => (params[zip.zipcode]), :nearlaunch => true).exists?
        addresses = Address.near(params[:search], 25, :order => :distance)
        @profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil?
        @title = "We have not launched for your location but these are near by " + (params[:search]).to_s
      else
        redirect_to :controller => 'pages', :action => 'notlaunched'
      end
    end

试试Area gem。你可以做一些类似的事情:

"San Jose, CA".to_zip #=> ["95101", "95102", ...

您可以像这样使用来获取任何纬度和经度的邮政编码

Geocoder.search([latitude, longitude]).first.postal_code

这可以在控制器中使用,也可以在模型以外的任何文件中使用。但是geocoder也提供了自动转换,提供了表应该具有所需的列名。有关更多信息,请访问此处的地理编码

最新更新