Class: Geokit::Geocoders::AwsGeoplacesGeocoder
- Inherits:
-
Geocoder
- Object
- Geocoder
- Geokit::Geocoders::AwsGeoplacesGeocoder
- Defined in:
- lib/geokit_aws_geoplaces.rb
Overview
and use :aws_geoplaces to specify this geocoder in your list of geocoders.
Class Method Summary collapse
- .do_geocode(address, options = {}) ⇒ Object
- .extract_geoloc(result_item) ⇒ Object
- .parse_response(res) ⇒ Object
- .set_address_components(result_item, loc) ⇒ Object
- .set_bounds(result_item, loc) ⇒ Object
- .set_precision(result_item, loc) ⇒ Object
Class Method Details
.do_geocode(address, options = {}) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/geokit_aws_geoplaces.rb', line 18 def self.do_geocode(address, = {}) client = Aws::GeoPlaces::Client.new( region: region, credentials: Aws::Credentials.new( access_key_id, secret_access_key ) ) res = client.geocode(query_text: address) return GeoLoc.new unless res.successful? parse_response res rescue => e logger.error("AwsGeoplacesGeocoder error for #{address.inspect}: #{e.class}: #{e.}") GeoLoc.new end |
.extract_geoloc(result_item) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/geokit_aws_geoplaces.rb', line 39 def self.extract_geoloc(result_item) loc = new_loc loc.lat = result_item.position[1] loc.lng = result_item.position[0] set_address_components(result_item, loc) set_precision(result_item, loc) set_bounds(result_item, loc) loc.success = true loc end |
.parse_response(res) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/geokit_aws_geoplaces.rb', line 32 def self.parse_response(res) return GeoLoc.new unless res.result_items.size > 0 result_item = res.result_items.first extract_geoloc result_item end |
.set_address_components(result_item, loc) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/geokit_aws_geoplaces.rb', line 52 def self.set_address_components(result_item, loc) address = result_item.address loc.country = address.country.name loc.country_code = address.country.code_2 loc.city = address.locality loc.district = address.district loc.zip = address.postal_code if address.region.present? loc.state_code = address.region.code loc.state_name = address.region.name loc.state = address.region.name end if address.sub_region.present? loc.county = address.sub_region.name end if result_item.place_type.to_s == "PointAddress" loc.street_address = "#{address.address_number} #{address.street}" loc.street_name = address.street loc.street_number = address.address_number loc.full_address = address.label end end |
.set_bounds(result_item, loc) ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'lib/geokit_aws_geoplaces.rb', line 92 def self.set_bounds(result_item, loc) map_view = result_item.map_view loc.suggested_bounds = Bounds.normalize( [ map_view[1], map_view[0] ], [ map_view[3], map_view[2] ] ) end |
.set_precision(result_item, loc) ⇒ Object
88 89 90 |
# File 'lib/geokit_aws_geoplaces.rb', line 88 def self.set_precision(result_item, loc) loc.precision = PRECISION_MAP[result_item.place_type] || 'unknown' end |