Class: Geokit::Geocoders::Geocoder

Inherits:
Object
  • Object
show all
Defined in:
lib/geokit/geocoders.rb

Overview

The Geocoder base class which defines the interface to be used by all other geocoders.

Class Method Summary collapse

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_locObject



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