【问题标题】:Make GeoKit play nicely with my Address class让 GeoKit 与我的 Address 类很好地配合
【发布时间】:2009-07-17 15:23:44
【问题描述】:

我的Address 类有一个geocode 类方法,该方法返回一个地址对象数组,该数组源自对该方法的参数进行地理编码(如果地理编码结果完全匹配,则该数组将有一个元素)。

编写此方法的一个令人讨厌的部分是将 GeoKit 地址对象转换为我的地址对象(例如,“street_address”->“address1”)。有没有更好的方法来做到这一点?

class Address < ActiveRecord::Base
  def self.geocode(string)
    return nil if string.nil?

    results = Geokit::Geocoders::GoogleGeocoder.geocode(string)

    address_objects = Array.new

    results.all.each do |r|
      params = Hash.new

      params['address1'] = r.street_address
      params['city'] = r.city
      params['zipcode'] = r.zip
      params['state'] = State.find_by_abbr(r.state)
      params['country'] = Country.find_by_iso(r.country_code)

      new_address = Address.new(params)
      new_address.single_line_address = r.full_address

      address_objects << new_address    
    end

    return address_objects
  end
end

【问题讨论】:

    标签: ruby-on-rails geocoding geokit


    【解决方案1】:

    接下来呢

    class Address < ActiveRecord::Base
      def self.geocode(string)
        return if string.nil?
    
        results = Geokit::Geocoders::GoogleGeocoder.geocode(string)
        results.all.map do |r|
          Address.new do |address|
            address.address1  = r.street_address
            address.city      = r.city
            address.zipcode   = r.zip
            address.state     = State.find_by_abbr(r.state)
            address.country   = Country.find_by_iso(r.country_code)
            address.single_line_address = r.full_address
          end
        end
      end
    end
    

    【讨论】:

    • 我忘记了Address.new 可以阻止。非常好!
    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2021-11-16
    • 2010-10-29
    • 2011-11-27
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多