18: def self.get(request)
19:
20: url = "http://maps.google.com/maps/geo?q=#{request}&key=#{API_KEY}&output=xml"
21: begin
22: xml = open(URI.encode(url)).read
23: rescue
24: raise ConnectionException.new("Unable to connect to Google Maps Geocoding service")
25: end
26:
27: doc = REXML::Document.new(xml)
28:
29: response = doc.elements['//Response']
30: placemarks = Placemarks.new(response.elements['name'].text,response.elements['Status/code'].text.to_i)
31: response.elements.each("Placemark") do |placemark|
32: data = placemark.elements
33: data_country = data['//CountryNameCode']
34: data_administrative = data['//AdministrativeAreaName']
35: data_sub_administrative = data['//SubAdministrativeAreaName']
36: data_locality = data['//LocalityName']
37: data_dependent_locality = data['//DependentLocalityName']
38: data_thoroughfare = data['//ThoroughfareName']
39: data_postal_code = data['//PostalCodeNumber']
40: placemarks << Geocoding::Placemark.new(data['address'].text,
41: data_country.nil? ? "" : data_country.text,
42: data_administrative.nil? ? "" : data_administrative.text,
43: data_sub_administrative.nil? ? "" : data_sub_administrative.text,
44: data_locality.nil? ? "" : data_locality.text,
45: data_dependent_locality.nil? ? "" : data_dependent_locality.text,
46: data_thoroughfare.nil? ? "" : data_thoroughfare.text,
47: data_postal_code.nil? ? "" : data_postal_code.text,
48: *(data['//coordinates'].text.split(",")[0..1].collect {|l| l.to_f }))
49: end
50: placemarks
51: end