什么是地理编码对象和地理编码器gem中的Geocoder :: Result对象数组

时间:2015-03-31 10:41:57

标签: ruby-on-rails rails-geocoder

我正在尝试使用geocoder gem但在使用反向地理编码时感到困惑。

我有"地区"模型与字段 - 国家,州,城市和邮政编码。

如果用户只填写zipcode,那么我想自动填写所有其他字段。

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和结果是什么以及如何设置obj和结果。

请举例说明。

1 个答案:

答案 0 :(得分:1)

我写了blog来解释它是如何工作的。你需要对geocoder gem进行地理编码并获取相关信息。

用户将使用Geocomplete输入地址,并将该地址存储在users / locations表的地址栏中 然后,使用Geocoder获取其他地理信息并使用地址更新其他列。

这就是................

================ users / locations表,这里我将使用允许用户使用Geocomplete填写地址,然后使用它来获取其他详细信息使用Geocoder

class CreateLocations < ActiveRecord::Migration
  def change
    create_table :places do |t|
      t.string :address
      t.float :latitude
      t.float :longitude
      ##======here the address field is important==========
      t.string :address
      t.string :country
      t.string :state
      t.string :city
      t.string :pincode
      t.timestamps
    end
    add_index :places, :address
  end
end

==================使用用户/位置模型中的地址进行自动填充的地理编码

##i want to use the address column to autopopulate others columns
geocoded_by :address
##also i want to use the latitude.longitude to fetch all others informations and then save in relevant ##feilds
reverse_geocoded_by :latitude, :longitude do |obj,results|
  if geo = results.first
    obj.state    = geo.state
    obj.city    = geo.city
    obj.pincode = geo.postal_code
    obj.country = geo.country
  end
end

##更改/更新/验证地址只有在地址改为提高性能时,每次##将不断更新

after_validation :geocode, :reverse_geocode ,:if => :address_changed?