Class: Geokit::Geocoders::OpencageGeocoder
Overview
OpenCage geocoder implementation. Requires the Geokit::Geocoders::OpencageGeocoder.key variable to contain an API key. Conforms to the interface set by the Geocoder class.
Class Method Summary
collapse
Methods inherited from Geocoder
call_geocoder_service, config, do_get, geocode, inherited, logger, net_adapter, new_loc, parse, process, protocol, provider_name, reverse_geocode, set_mappings, use_https?
Class Method Details
.do_geocode(address, options = {}) ⇒ Object
Template method which does the geocode lookup.
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/geokit/geocoders/opencage.rb', line 12
def self.do_geocode(address, options = {})
options_str = generate_param_for_option(:language, options)
options_str << generate_param_for_option(:bounds, options)
options_str << generate_param_for_option(:min_confidence, options)
address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
url = "#{protocol}://api.opencagedata.com/geocode/v1/json?"
url += "key=#{key}#{options_str}&"
url += "query=#{Geokit::Inflector.url_escape(address_str)}&"
url += 'no_annotations=1'
process :json, url
end
|
.do_reverse_geocode(latlng) ⇒ Object
Template method which does the reverse-geocode lookup.
25
26
27
28
29
30
|
# File 'lib/geokit/geocoders/opencage.rb', line 25
def self.do_reverse_geocode(latlng)
latlng = LatLng.normalize(latlng)
url = "#{protocol}://api.opencagedata.com/geocode/v1/json?"
url += "key=#{key}&query=#{latlng.lat},#{latlng.lng}"
process :json, url
end
|
62
63
64
65
66
67
68
69
70
|
# File 'lib/geokit/geocoders/opencage.rb', line 62
def self.(result_json)
loc = new_loc
loc.lat = result_json['geometry']['lat']
loc.lng = result_json['geometry']['lng']
set_address_components(result_json['components'], loc)
set_precision(result_json, loc)
loc.success = true
loc
end
|
.generate_bool_param_for_option(param, options) ⇒ Object
40
41
42
|
# File 'lib/geokit/geocoders/opencage.rb', line 40
def self.generate_bool_param_for_option(param, options)
options[param] ? "&#{param}=1" : "&#{param}=0"
end
|
.generate_param_for(param, value) ⇒ Object
32
33
34
|
# File 'lib/geokit/geocoders/opencage.rb', line 32
def self.generate_param_for(param, value)
"&#{param}=#{Geokit::Inflector.url_escape(value.to_s)}"
end
|
.generate_param_for_option(param, options) ⇒ Object
36
37
38
|
# File 'lib/geokit/geocoders/opencage.rb', line 36
def self.generate_param_for_option(param, options)
options[param] ? "&#{param}=#{Geokit::Inflector.url_escape(options[param])}" : ''
end
|
.parse_json(results) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/geokit/geocoders/opencage.rb', line 44
def self.parse_json(results)
return GeoLoc.new if results.empty?
if results.is_a?(Hash)
return GeoLoc.new unless results['status']['message'] == 'OK'
end
loc = nil
results['results'].each do |result|
= (result)
if loc.nil?
loc =
else
loc.all.push()
end
end
loc
end
|
.set_address_components(address_data, loc) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/geokit/geocoders/opencage.rb', line 72
def self.set_address_components(address_data, loc)
return unless address_data
loc.country = address_data['country']
loc.country_code = address_data['country_code'].upcase if address_data['country_code']
loc.state_name = address_data['state']
loc.county = address_data['county']
loc.city = address_data['city']
loc.city = address_data['town'] if loc.city.nil? && address_data['town']
loc.city = address_data['county'] if loc.city.nil? && address_data['county']
loc.zip = address_data['postcode']
loc.district = address_data['city_district']
loc.district = address_data['state_district'] if loc.district.nil? && address_data['state_district']
loc.neighborhood = address_data['neighbourhood']
loc.neighborhood = address_data['suburb'] if loc.neighborhood.nil?
loc.street_address = "#{address_data['road']} #{address_data['house_number']}".strip if address_data['road']
loc.street_name = address_data['road']
loc.street_number = address_data['house_number']
end
|
.set_precision(result_json, loc) ⇒ Object
91
92
93
94
|
# File 'lib/geokit/geocoders/opencage.rb', line 91
def self.set_precision(result_json, loc)
loc.precision = result_json['confidence']
end
|