Module Ym4r::GmPlugin::Geocoding
In: lib/gm_plugin/geocoding.rb

Methods

get  

Classes and Modules

Class Ym4r::GmPlugin::Geocoding::Placemark
Class Ym4r::GmPlugin::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. Options can either an explicity GMaps API key (:key) or a host, (:host).

[Source]

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

[Validate]