Module Ym4r::GoogleMaps::Geocoding
In: lib/ym4r/google_maps/geocoding.rb

Methods

get  

Classes and Modules

Class Ym4r::GoogleMaps::Geocoding::ConnectionException
Class Ym4r::GoogleMaps::Geocoding::Placemark
Class Ym4r::GoogleMaps::Geocoding::Placemarks

Constants

GEO_SUCCESS = 200
GEO_MISSING_ADDRESS = 601
GEO_UNKNOWN_ADDRESS = 602
GEO_UNAVAILABLE_ADDRESS = 603
GEO_BAD_KEY = 610
GEO_TOO_MANY_QUERIES = 620
GEO_SERVER_ERROR = 500

Public Class methods

Gets placemarks by querying the Google Maps Geocoding service with the request string

[Source]

    # File lib/ym4r/google_maps/geocoding.rb, line 18
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

[Validate]