【问题标题】:Rails geocoding only allowing one attribute?Rails地理编码只允许一个属性?
【发布时间】:2013-05-31 12:03:38
【问题描述】:

我正在尝试获取两个不同值的纬度和经度值。这些是在我的 Mileage 模型中的 startend 属性中设置的。

geocoded_by :end, :latitude  => :latitude, :longitude => :longitude
geocoded_by :start, :latitude  => :start_lat, :longitude => :start_lon

我的 Mileage 模型具有以下属性:

start
start_lat
start_long
end
latitude
longitude

根据 Mileage 模型顶部的 geocoded_by 行,仅对其中一个属性进行地理编码。有没有办法让地理编码器gem 处理这两个属性?

【问题讨论】:

    标签: ruby-on-rails-3 maps location geocoding


    【解决方案1】:

    简短的回答是否定的。

    但推出自己的解决方案并不难。基本上 geocoded_by:设置了一种简单的方法来对来自回调的地址 lat/long 进行地理编码,其中包含一些选项(lat/long 列名等)。

    有一个实用的方法来查找地址的纬度/经度:

    Geocoder.coordinates(the_start_address)
         => [42.700149, -74.922767]
    

    所以您可以使用 geocoded_by: 方法来处理示例中的结尾 lat/long,然后执行类似的操作

    before_save :geocode_the_start_address
    
    def geocode_the_start_address
      coords = Geocoder.coordinates(self.start)
      self.start_lat = coords[0]
      self.start_long = coords[1]
    end
    

    老实说,我自己会更一致地命名事物——start_address、end_address、start_lat、start_long 等。而且我还会使用自定义方法对开始和结束地址进行地理编码,而不是 geocoded_by,这样代码就更一致了。

    【讨论】:

      【解决方案2】:

      我同意 John Paul 的观点,但我会在 after_save 中执行此操作 - 所以,基本上,让您的 Milage 模型在创建时对起始地址执行地理编码,然后在创建完成后(例如地理编码已在起始地址上执行,并且您有一个有效的起始地址),请使用单独的回调对结束地址执行地理编码。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2021-10-25
        • 1970-01-01
        相关资源
        最近更新 更多