Class: Geokit::Geocoders::Geocoder

Inherits:
Object
  • Object
show all
Defined in:
lib/geokit/geocoders.rb,
lib/geokit/geocoders_mine.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.



149
150
151
152
153
154
# File 'lib/geokit/geocoders.rb', line 149

def self.call_geocoder_service(url)
  Timeout::timeout(Geokit::Geocoders::request_timeout) { return self.do_get(url) } if Geokit::Geocoders::request_timeout        
  return self.do_get(url)
rescue TimeoutError
  return nil  
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.



159
160
161
# File 'lib/geokit/geocoders.rb', line 159

def self.do_reverse_geocode(latlng)
  return GeoLoc.new
end

.geocode(address, options = {}) ⇒ 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.



136
137
138
139
# File 'lib/geokit/geocoders.rb', line 136

def self.geocode(address, options = {}) 
  res = do_geocode(address, options)
  return res.nil? ? GeoLoc.new : res
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.



143
144
145
146
# File 'lib/geokit/geocoders.rb', line 143

def self.reverse_geocode(latlng)
  res = do_reverse_geocode(latlng)
  return res.success? ? res : GeoLoc.new        
end

.sign_url(raw_url, private_key) ⇒ Object

This will sign a raw url with a private key



164
165
166
167
168
169
170
171
172
173
174
# File 'lib/geokit/geocoders.rb', line 164

def self.sign_url(raw_url,private_key)
  uri = URI.parse(raw_url)
  url_to_sign = uri.path + "?" + uri.query
  decoded_key = Geocoder.urlsafe_decode64(private_key)

  sha1_digest  = OpenSSL::Digest::Digest.new('sha1')
  signature = OpenSSL::HMAC.digest(sha1_digest,decoded_key,url_to_sign)
  encoded_signature = Geocoder.urlsafe_encode64(signature)
  signed_url = "#{uri.scheme}://#{uri.host}#{uri.path}?#{uri.query}&signature=#{encoded_signature}".strip!
  signed_url
end

.urlsafe_decode64(raw_text) ⇒ Object

This will provide url safe base64 decoding



177
178
179
180
181
# File 'lib/geokit/geocoders.rb', line 177

def self.urlsafe_decode64(raw_text)
  decoded_text = raw_text.gsub('-','+').gsub('_', '/')
  decoded_text = Base64.decode64(decoded_text)
  decoded_text
end

.urlsafe_encode64(raw_text) ⇒ Object

This will provide url safe base64 encoding



184
185
186
187
188
# File 'lib/geokit/geocoders.rb', line 184

def self.urlsafe_encode64(raw_text)
  encoded_text = Base64.encode64(raw_text)
  encoded_text = encoded_text.gsub('+','-').gsub('/', '_')
  encoded_text
end