Sha256: df18070316a7025a1a949e12e70bcf645349fe628c7c5c44834c18fc3ac98ecc

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

module Graticule #:nodoc:
  module Geocoder #:nodoc:

    # TODO: Reverse Geocoding
    class GeocoderCa < Rest

      def initialize(auth = nil)
        @url = URI.parse 'http://geocoder.ca/'
        @auth = auth
      end

      def locate(address)
        get :locate => address.is_a?(String) ? address : location_from_params(address).to_s(:country => false)
      end
      
    private
      
      def parse_response(xml) #:nodoc:
        location = Location.new
        location.latitude = xml.elements['geodata/latt'].text.to_f
        location.longitude = xml.elements['geodata/longt'].text.to_f
        location.street = xml.elements['geodata/standard/staddress'].text
        location.locality = xml.elements['geodata/standard/city'].text
        location.region = xml.elements['geodata/standard/prov'].text
        [location]
      end

      def check_error(xml) #:nodoc:
        error = xml.elements['geodata/error']
        if error
          code = error.elements['code'].text.to_i
          message = error.elements['description'].text
          if (1..3).include?(code)
            raise CredentialsError, message
          elsif (4..8).include?(code)
            raise AddressError, message
          else
            raise Error, message
          end
        end
      end

      def make_url(params) #:nodoc:
        params[:auth]       = @auth if @auth
        params[:standard]   = 1
        params[:showpostal] = 1
        params[:geoit]      = 'XML'
        super params
      end


    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aub-graticule-0.2.11 lib/graticule/geocoder/geocoder_ca.rb
aub-graticule-0.3.2 lib/graticule/geocoder/geocoder_ca.rb
aub-graticule-0.3.1 lib/graticule/geocoder/geocoder_ca.rb
aub-graticule-0.3.0 lib/graticule/geocoder/geocoder_ca.rb