class Malkist::Distances

Class Distance is a class to get Distance Matrix of coordinates. It will hit Google Maps Distance Matrix API and wrap it inside Distance class based on its origin and destination.

Public Class Methods

new(origins, destinations) click to toggle source
# File lib/malkist/distances.rb, line 11
def initialize(origins, destinations)
  @origins = origins
  @destinations = destinations
end

Public Instance Methods

calculate_distance() click to toggle source

calculate_distance will hit Distance Matrix API and wrap it inside class Distance.

# File lib/malkist/distances.rb, line 17
def calculate_distance
  uri = URI('https://maps.googleapis.com/maps/api/distancematrix/json')

  params = { origins: @origins.join('|'), destinations: @destinations.join('|') }

  uri.query = URI.encode_www_form(params)

  res = Net::HTTP.get_response(uri)

  # puts uri

  return [] unless res.is_a?(Net::HTTPSuccess)

  body = {}

  body = JSON.parse(res.body)

  result = []

  body['rows'].each_with_index do |row, row_index|
    row['elements'].each_with_index do |element, index|
      dist = Distance.new(
        body['origin_addresses'][row_index],
        body['destination_addresses'][index],
        element['distance']['value'],
        element['duration']['value']
      )
      result.push(dist)
    end
  end

  result
end