问题描述
地理编码器 gem 允许 configuring multiple services,这很方便,因为不同的服务提供不同程度的满意度;依赖多个服务可能是合理的。
但连接并不明显。
如果提供了字段的定义
geocoded_by :address,latitude: :lat,longitude: :lon,lookup: lambda{ |obj| obj.geocoder_lookup } # lookup specified for conditional lookups
after_validation :geocode,if: ->(obj){ obj.address.present? and obj.address_changed? }
def address
[...]
end
本身,如果提供了一组以上的 API 密钥,则查找不会定向到使用哪一个。此外,根据结果,人们可能希望在获得的结果之间进行切换……或者更好的是,存储两组结果以选择更好的结果。
始终可以fetch the response 并处理 JSON 响应。但这仍然不能解决上游的 API 密钥使用问题。
使用默认服务的更好方法是什么,比如 openstreetmap
,但随后能够查询另一个服务
response = Geocoder::Lookup.get(:bing).send(:fetch_raw_data,Geocoder::Query.new("..."))
JSON.parse(response)
并根据应用逻辑处理结果?
以下失败的主要服务是什么 地理编码器.rb
Geocoder.configure(
opencagedata: {
api_key: 'dc71e30f41415d36b407082b5aa7eeb8',timeout: 9
},bing: {
api_key: '1IzaSyU1CoJ3otnGAQc1DWMZUy7zPdbn4ZxZE',timeout: 5
},language: :en,use_https: true,units: :km
)
模型配置
def geocoder_lookup
:opencagedata
end
@response = Geocoder::Lookup.get(:opencagedata).send(:fetch_raw_data,Geocoder::Query.new("..."))
>> Geocoding API error: 401 Unauthorized "message\":\"invalid API key\"
而
@response = Geocoder::Lookup.get(:bing).send(:fetch_raw_data,Geocoder::Query.new("..."))
返回一个 JSON 响应。
使用默认服务(例如 opencagedata
)但随后能够查询另一个服务并根据应用程序逻辑处理结果的更好方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)