diff --git a/lib/geocoder.rb b/lib/geocoder.rb index a4b52ac55bab3f091cec83fc9d649a322d848fed..f5b9d8afb0bba9e35bfafcf6154465cbe4354a00 100644 --- a/lib/geocoder.rb +++ b/lib/geocoder.rb @@ -57,7 +57,7 @@ module Geocoder # All street address lookups, default first. # def street_lookups - [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim] + [:google, :google_premier, :yahoo, :bing, :geocoder_ca, :yandex, :nominatim,:mapquest] end ## diff --git a/lib/geocoder/lookups/mapquest.rb b/lib/geocoder/lookups/mapquest.rb new file mode 100644 index 0000000000000000000000000000000000000000..f986185a9cdec5a5de64c2e82975c70589389d49 --- /dev/null +++ b/lib/geocoder/lookups/mapquest.rb @@ -0,0 +1,38 @@ +require 'geocoder/lookups/base' +require "geocoder/results/mapquest" + +module Geocoder::Lookup + class Mapquest < Base + + def map_link_url(coordinates) + "http://www.openstreetmap.org/?lat=#{coordinates[0]}&lon=#{coordinates[1]}&zoom=15&layers=M" + end + + private # --------------------------------------------------------------- + + def results(query, reverse = false) + return [] unless doc = fetch_data(query, reverse) + doc.is_a?(Array) ? doc : [doc] + end + + def query_url(query, reverse = false) + params = { + :format => "json", + :json_callback=>"?", + :polygon => "1", + :addressdetails => "1", + :"accept-language" => Geocoder::Configuration.language + } + if (reverse) + method = 'reverse' + parts = query.split(/\s*,\s*/); + params[:lat] = parts[0] + params[:lon] = parts[1] + else + method = 'search' + params[:q] = query + end + "http://open.mapquestapi.com/#{method}?" + hash_to_query(params) + end + end +end diff --git a/lib/geocoder/results/mapquest.rb b/lib/geocoder/results/mapquest.rb new file mode 100644 index 0000000000000000000000000000000000000000..5b132b1f8ca90f301209766d83d202a9d1fd480e --- /dev/null +++ b/lib/geocoder/results/mapquest.rb @@ -0,0 +1,66 @@ +require 'geocoder/results/base' + +module Geocoder::Result + class Mapquest < Base + + def house_number + @data['address']['house_number'] + end + + def address + @data['display_name'] + end + + def street + @data['address']['road'] + end + + def city + @data['address']['city'] + end + + def village + @data['address']['villiage'] + end + + def town + @data['address']['town'] + end + + def state + @data['address']['state'] + end + + alias_method :state_code, :state + + def postal_code + @data['address']['postcode'] + end + + def county + @data['address']['county'] + end + + def country + @data['address']['country'] + end + def country_code + @data['address']['country_code'] + end + + def coordinates + [@data['lat'].to_f, @data['lon'].to_f] + end + + def self.response_attributes + %w[place_id, boundingbox, license, + polygonpoints, display_name, class, type, stadium, suburb] + end + + response_attributes.each do |a| + define_method a do + @data[a] + end + end + end +end