Ruby 地理编码:当纬度和经度已经存在于其他来源时,制作一个模型 'geocoded'?

Ruby Geocode: Make a model 'geocoded' when latitude and longitude already exist from other source?

在我的应用程序中,我有一个 Model 并且正在从与地理编码无关的外部 API 检索每行的 latlng 值。此时我需要地理编码的是 .nearbys 方法,它让我在默认半径(50 英里)或我指定的范围内找到附近的其他 models

通常你 "active" 通过添加 geocoded_by :attribute_name 进行地理编码的模型,其中 attribute_name 将在保存对象时使用地理编码来获取 lat/long 坐标。

现在我只是将它添加到我的模型中以使其工作:

geocoded_by :blargh, latitude: :lat, longitude: :lng

def blargh
end

这似乎工作正常。我可以打开控制台,实例化 Model,然后调用 model.nearbys。然而,这似乎有点老套,我想知道是否有比定义一个假方法并将其传递给 geocoded_by 更好的方法。非常感谢您的帮助!

昨天我遇到了同样的问题,即使这是一个老问题我在这里分享我的解决方案以防其他人需要它。

您可以直接在需要文件并定义地理编码器选项的模型中包含地理编码器 gem(在我的例子中,这些只是我的数据库列上的经纬度名称)。

由于我使用的是 ActiveRecord 模型,因此我需要:

require "geocoder/stores/active_record"

class User < ActiveRecord::Base
  include Geocoder::Store::ActiveRecord

  def self.geocoder_options
    { latitude: 'latitude', longitude: 'longitude' }
  end

end

我认为这比使用假地址方法更干净。