Sha256: 6aef7a2b0192c2587449beb0e993b871f094855c23bfbd9e11a1ea012b237fcc
Contents?: true
Size: 1.59 KB
Versions: 1
Compression:
Stored size: 1.59 KB
Contents
module Geokit module Geocoders # Another geocoding web service # http://www.geonames.org class GeonamesGeocoder < Geocoder private # Template method which does the geocode lookup. def self.do_geocode(address) url = submit_url(address) res = call_geocoder_service(url) return GeoLoc.new if !res.is_a?(Net::HTTPSuccess) xml = res.body logger.debug "Geonames geocoding. Address: #{address}. Result: #{xml}" parse :xml, xml end def self.submit_url(address) address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address # geonames need a space seperated search string address_str.gsub!(/,/, " ") params = "/postalCodeSearch?placename=#{Geokit::Inflector::url_escape(address_str)}&maxRows=10" if Geokit::Geocoders::geonames "http://ws.geonames.net#{params}&username=#{Geokit::Geocoders::geonames}" else "http://ws.geonames.org#{params}" end end XML_MAPPINGS = { :city => 'name', :state => 'adminName1', :zip => 'postalcode', :country_code => 'countryCode', :lat => 'lat', :lng => 'lng' } def self.parse_xml(xml) return GeoLoc.new unless xml.elements['geonames/totalResultsCount'].text.to_i > 0 loc = GeoLoc.new loc.provider = 'genomes' # only take the first result set_mappings(loc, xml.elements['geonames/code'], XML_MAPPINGS) loc.success = true loc end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
geokit-1.8.0 | lib/geokit/geocoders/geonames.rb |