使用多种服务的地理编码器

问题描述

地理编码器 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

获取响应似乎只能消化提供的最后一个 API 密钥。

@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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...