Class: Geokit::Geocoders::Geocoder
Overview
The Geocoder base class which defines the interface to be used by all other geocoders.
Direct Known Subclasses
BaseIpGeocoder, BingGeocoder, CaGeocoder, FCCGeocoder, GeonamesGeocoder, GoogleGeocoder, MapQuestGeocoder, MaxmindGeocoder, MultiGeocoder, OSMGeocoder, UsGeocoder, YahooGeocoder, YandexGeocoder
Class Method Summary collapse
-
.call_geocoder_service(url) ⇒ Object
Call the geocoder service using the timeout if configured.
- .config(*attrs) ⇒ Object
-
.do_reverse_geocode(latlng) ⇒ Object
Not all geocoders can do reverse geocoding.
-
.geocode(address, *args) ⇒ Object
Main method which calls the do_geocode template method which subclasses are responsible for implementing.
- .new_loc ⇒ Object
-
.reverse_geocode(latlng) ⇒ Object
Main method which calls the do_reverse_geocode template method which subclasses are responsible for implementing.
Class Method Details
.call_geocoder_service(url) ⇒ Object
Call the geocoder service using the timeout if configured.
119 120 121 122 123 124 |
# File 'lib/geokit/geocoders.rb', line 119 def self.call_geocoder_service(url) Timeout::timeout(Geokit::Geocoders::request_timeout) { return self.do_get(url) } if Geokit::Geocoders::request_timeout self.do_get(url) rescue TimeoutError nil end |
.config(*attrs) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/geokit/geocoders.rb', line 79 def self.config(*attrs) attrs.each do |attr| class_eval <<-METHOD @@#{attr} = nil def self.#{attr}=(value) @@#{attr} = value end def self.#{attr} @@#{attr} end METHOD end end |
.do_reverse_geocode(latlng) ⇒ Object
Not all geocoders can do reverse geocoding. So, unless the subclass explicitly overrides this method, a call to reverse_geocode will return an empty GeoLoc. If you happen to be using MultiGeocoder, this will cause it to failover to the next geocoder, which will hopefully be one which supports reverse geocoding.
129 130 131 |
# File 'lib/geokit/geocoders.rb', line 129 def self.do_reverse_geocode(latlng) GeoLoc.new end |
.geocode(address, *args) ⇒ Object
Main method which calls the do_geocode template method which subclasses are responsible for implementing. Returns a populated GeoLoc or an empty one with a failed success code.
95 96 97 98 99 100 101 102 103 |
# File 'lib/geokit/geocoders.rb', line 95 def self.geocode(address, *args) logger.debug "#{provider_name} geocoding. address: #{address}, args #{args}" do_geocode(address, *args) || GeoLoc.new rescue TooManyQueriesError, GeocodeError raise rescue logger.error "Caught an error during #{provider_name} geocoding call: #{$!}" GeoLoc.new end |
.new_loc ⇒ Object
112 113 114 115 116 |
# File 'lib/geokit/geocoders.rb', line 112 def self.new_loc loc = GeoLoc.new loc.provider = Geokit::Inflector.underscore(provider_name) loc end |
.reverse_geocode(latlng) ⇒ Object
Main method which calls the do_reverse_geocode template method which subclasses are responsible for implementing. Returns a populated GeoLoc or an empty one with a failed success code.
107 108 109 110 |
# File 'lib/geokit/geocoders.rb', line 107 def self.reverse_geocode(latlng) logger.debug "#{provider_name} geocoding. latlng: #{latlng}" do_reverse_geocode(latlng) || GeoLoc.new end |