class Geokit::Geocoders::GeonamesGeocoder

Another geocoding web service www.geonames.org

Constants

XML_MAPPINGS

Private Class Methods

do_geocode(address, _=nil) click to toggle source

Template method which does the geocode lookup.

# File lib/geokit/geocoders/geonames.rb, line 11
def self.do_geocode(address, _=nil)
  process :xml, submit_url(address)
end
parse_xml(xml) click to toggle source
# File lib/geokit/geocoders/geonames.rb, line 42
def self.parse_xml(xml)
  count = xml.elements['geonames/totalResultsCount']
  return GeoLoc.new unless !count.nil? && count.text.to_i > 0
  loc = new_loc
  # only take the first result
  set_mappings(loc, xml.elements['geonames/code'], XML_MAPPINGS)
  loc.success = true
  loc
end
submit_url(address) click to toggle source
# File lib/geokit/geocoders/geonames.rb, line 15
def self.submit_url(address)
  if key.nil? || key.empty?
    raise(Geokit::Geocoders::GeocodeError, 'Geonames requires a key to use their service.')
  end

  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 premium
    "http://ws.geonames.net#{params}&username=#{key}"
  else
    "http://api.geonames.org#{params}&username=#{key}"
  end
end