Class: Geokit::Geocoders::Geocoder
- Inherits:
-
Object
- Object
- Geokit::Geocoders::Geocoder
- 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.
Direct Known Subclasses
CaGeocoder, GeoPluginGeocoder, GeonamesGeocoder, GoogleGeocoder, GoogleGeocoder3, IpGeocoder, MultiGeocoder, UsGeocoder, YahooGeocoder
Class Method Summary collapse
-
.call_geocoder_service(url) ⇒ Object
Call the geocoder service using the timeout if configured.
-
.do_reverse_geocode(latlng) ⇒ Object
Not all geocoders can do reverse geocoding.
-
.geocode(address, options = {}) ⇒ Object
Main method which calls the do_geocode template method which subclasses are responsible for implementing.
-
.reverse_geocode(latlng) ⇒ Object
Main method which calls the do_reverse_geocode template method which subclasses are responsible for implementing.
-
.sign_url(raw_url, private_key) ⇒ Object
This will sign a raw url with a private key.
-
.urlsafe_decode64(raw_text) ⇒ Object
This will provide url safe base64 decoding.
-
.urlsafe_encode64(raw_text) ⇒ Object
This will provide url safe base64 encoding.
Class Method Details
.call_geocoder_service(url) ⇒ Object
Call the geocoder service using the timeout if configured.
147 148 149 150 151 152 |
# File 'lib/geokit/geocoders.rb', line 147 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.
157 158 159 |
# File 'lib/geokit/geocoders.rb', line 157 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.
134 135 136 137 |
# File 'lib/geokit/geocoders.rb', line 134 def self.geocode(address, = {}) res = do_geocode(address, ) 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.
141 142 143 144 |
# File 'lib/geokit/geocoders.rb', line 141 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
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/geokit/geocoders.rb', line 162 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.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
175 176 177 178 179 |
# File 'lib/geokit/geocoders.rb', line 175 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
182 183 184 185 186 |
# File 'lib/geokit/geocoders.rb', line 182 def self.urlsafe_encode64(raw_text) encoded_text = Base64.encode64(raw_text) encoded_text = encoded_text.gsub('+','-').gsub('/', '_') encoded_text end |