class JDX::Geocoder::Google
Constants
- CITY_FIELDS
- RADIUS
Public Class Methods
new(term)
click to toggle source
# File lib/jdx/geocoder/google.rb, line 10 def initialize(term) @term = term end
Public Instance Methods
address()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 27 def address data['formatted_address'] end
bounds()
click to toggle source
- [northeast
- southwest]
# File lib/jdx/geocoder/google.rb, line 61 def bounds @bounds ||= begin bounds = data.dig('geometry', 'bounds') || data.dig('geometry', 'viewport') return nil if bounds.nil? bounds.values.map do |v| v.values.reverse! end end end
center()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 72 def center @center ||= begin co1, co2 = bounds [(co1[0] + co2[0]) / 2, (co1[1] + co2[1]) / 2] end end
city()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 31 def city CITY_FIELDS.each do |c| if (r = type_find(c, 'long_name')) return r end end nil end
coordinates()
click to toggle source
coordinate order is longitude, latitude
# File lib/jdx/geocoder/google.rb, line 15 def coordinates data.dig('geometry', 'location').values.reverse! end
country()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 44 def country type_find('country', 'long_name') end
country_code()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 52 def country_code type_find('country', 'short_name') end
deg2rad(lng, lat)
click to toggle source
# File lib/jdx/geocoder/google.rb, line 85 def deg2rad(lng, lat) [lng * Math::PI / 180, lat * Math::PI / 180] end
latitude()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 19 def latitude data.dig('geometry', 'location', 'lat') end
longitude()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 23 def longitude data.dig('geometry', 'location', 'lng') end
place_id()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 93 def place_id data['place_id'] end
postal_code()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 56 def postal_code type_find('postal_code', 'short_name') end
spherical_distance()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 79 def spherical_distance # rubocop:disable Metrics/AbcSize rlng1, rlat1 = deg2rad(*bounds[1]) rlng2, rlat2 = deg2rad(*center) (2 * RADIUS * Math.asin(Math.sqrt(Math.sin((rlat2 - rlat1) / 2)**2 + Math.cos(rlat1) * Math.cos(rlat2) * Math.sin((rlng2 - rlng1) / 2)**2))).round(3) end
state()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 40 def state type_find('administrative_area_level_1', 'long_name') end
state_code()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 48 def state_code type_find('administrative_area_level_1', 'short_name') end
types()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 89 def types data['types'] end
Private Instance Methods
cache_redis()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 127 def cache_redis @cache_redis ||= Geocoder.configuration.location_cache_db end
google_key()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 123 def google_key @google_key ||= Geocoder.configuration.google_key end
handle_response()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 111 def handle_response response = typhoeus_get if response.success? data = parse_json(response.body) return [true, data] end handle_request_error(response) false end
serialize_data(response_data)
click to toggle source
# File lib/jdx/geocoder/google.rb, line 107 def serialize_data(response_data) response_data['results'][0] end
type_find(area, range)
click to toggle source
# File lib/jdx/geocoder/google.rb, line 99 def type_find(area, range) data['address_components'].find { |a| a['types'].include?(area) }&.dig(range) end
url()
click to toggle source
# File lib/jdx/geocoder/google.rb, line 103 def url "https://maps.googleapis.com/maps/api/geocode/json?key=#{google_key}&address=#{escape_term}®ion=us" end