Sha256: 516a3fea0750cc3b023712daca382f8d0a73e43fe656e5c5dc1635eb404caddb

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

# Geocoder CA geocoder implementation.  Requires the Geokit::Geocoders::GEOCODER_CA variable to
# contain true or false based upon whether authentication is to occur.  Conforms to the
# interface set by the Geocoder class.
#
# Returns a response like:
# <?xml version="1.0" encoding="UTF-8" ?>
# <geodata>
#   <latt>49.243086</latt>
#   <longt>-123.153684</longt>
# </geodata>
module Geokit
  module Geocoders
    class CaGeocoder < Geocoder
      config :key

      private

      # Template method which does the geocode lookup.
      def self.do_geocode(loc)
        raise ArgumentError('Geocoder.ca requires a GeoLoc argument') unless loc.is_a?(GeoLoc)
        process :xml, submit_url(loc), loc
      end

      def self.parse_xml(xml, loc)
        loc.lat = xml.elements['//latt'].text
        loc.lng = xml.elements['//longt'].text
        loc.success = true
        loc
      end

      # Formats the request in the format acceptable by the CA geocoder.
      def self.submit_url(loc)
        args = []
        args << "stno=#{loc.street_number}" if loc.street_address
        args << "addresst=#{Geokit::Inflector.url_escape(loc.street_name)}" if loc.street_address
        args << "city=#{Geokit::Inflector.url_escape(loc.city)}" if loc.city
        args << "prov=#{loc.state}" if loc.state
        args << "postal=#{loc.zip}" if loc.zip
        args << "auth=#{key}" if key
        args << 'geoit=xml'
        'http://geocoder.ca/?' + args.join('&')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
geokit-1.9.0 lib/geokit/geocoders/ca_geocoder.rb