Ruby Geocoder Gem, чтобы найти почтовый индекс - PullRequest
4 голосов
/ 20 января 2012

Я использую гем ruoc geocoder для поиска по местоположению. Я хочу ограничить поиск мест, которые были официально запущены. Если кто-то ищет по почтовому индексу, это легко с помощью регулярных выражений. Но если кто-то выполняет поиск по городу, мне нужно преобразовать город в почтовый индекс, проверить мою почтовую таблицу и, если она положительная, вернуть результаты поиска.

Геокодер 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 ('san jose, 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

Ответы [ 2 ]

5 голосов
/ 28 июня 2012

Попробуйте камень Площадь .Вы можете сделать что-то вроде:

"San Jose, CA".to_zip #=> ["95101", "95102", ...
1 голос
/ 14 февраля 2017

Вы можете использовать это, чтобы получить почтовый индекс для любой широты и долготы

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

Это можно использовать в контроллере или любых файлах, кроме моделей.Но геокодер также обеспечивает автоматическое преобразование, если в таблице должны быть указаны имена столбцов.Для получения дополнительной информации посетите здесь геокодер

...