Sha256: 833fc8305729e05de8e123b1452ea893a03707491bd7410daf7c3797e182e488
Contents?: true
Size: 1.63 KB
Versions: 1
Compression:
Stored size: 1.63 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) url = submit_url(loc) res = call_geocoder_service(url) return GeoLoc.new if !res.is_a?(Net::HTTPSuccess) xml = res.body logger.debug "Geocoder.ca geocoding. Address: #{loc}. Result: #{xml}" parse :xml, xml, 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.8.1 | lib/geokit/geocoders/ca_geocoder.rb |