class Geokit::Geocoders::MapQuestGeocoder
MapQuest geocoder implementation. Requires the Geokit::Geocoders::MapQuestGeocoder:key variable to contain a MapQuest API key. Conforms to the interface set by the Geocoder class.
Private Class Methods
do_geocode(address)
click to toggle source
Template method which does the geocode lookup.
# File lib/geokit/geocoders/mapquest.rb, line 19 def self.do_geocode(address) address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address url = "#{protocol}://www.mapquestapi.com/geocoding/v1/address?key=#{key}&location=#{Geokit::Inflector.url_escape(address_str)}" process :json, url end
do_reverse_geocode(latlng)
click to toggle source
Template method which does the reverse-geocode lookup.
# File lib/geokit/geocoders/mapquest.rb, line 12 def self.do_reverse_geocode(latlng) latlng = LatLng.normalize(latlng) url = "#{protocol}://www.mapquestapi.com/geocoding/v1/reverse?key=#{key}&location=#{latlng.lat},#{latlng.lng}" process :json, url end
extract_geoloc(result_json)
click to toggle source
# File lib/geokit/geocoders/mapquest.rb, line 41 def self.extract_geoloc(result_json) loc = new_loc loc.lat = result_json["latLng"]["lat"] loc.lng = result_json["latLng"]["lng"] set_address_components(result_json, loc) set_precision(result_json, loc) loc.success = true loc end
parse_json(results)
click to toggle source
# File lib/geokit/geocoders/mapquest.rb, line 25 def self.parse_json(results) return GeoLoc.new unless results["info"]["statuscode"] == 0 loc = nil results["results"].each do |result| result["locations"].each do |location| extracted_geoloc = extract_geoloc(location) if loc.nil? loc = extracted_geoloc else loc.all.push(extracted_geoloc) end end end loc end
set_address_components(result_json, loc)
click to toggle source
# File lib/geokit/geocoders/mapquest.rb, line 51 def self.set_address_components(result_json, loc) loc.country_code = result_json["adminArea1"] loc.street_address = result_json["street"].to_s.empty? ? nil : result_json["street"] loc.city = result_json["adminArea5"] loc.state = result_json["adminArea3"] loc.zip = result_json["postalCode"] end
set_precision(result_json, loc)
click to toggle source
# File lib/geokit/geocoders/mapquest.rb, line 59 def self.set_precision(result_json, loc) loc.precision = result_json["geocodeQuality"] loc.accuracy = %w(unknown country state state city zip zip+4 street address building).index(loc.precision) end