class OSRM::Route

Attributes

distance[RW]
duration[RW]
geometry[RW]

Public Class Methods

new(json = {}) click to toggle source
# File lib/osrm/route.rb, line 7
def initialize(json = {})
  @geometry = decode_geometry(json[:geometry])
  @distance = json[:distance].to_f
  @duration = json[:duration].to_f
end

Private Instance Methods

decode_geometry(geometry) click to toggle source
# File lib/osrm/route.rb, line 15
def decode_geometry(geometry)
  return nil if geometry.nil?
  return [] if geometry.empty?

  EncodedPolyline.decode_points(geometry, 5).map do |point|
    point.map { |coordinate| fix_float_precision(coordinate) }
  end
end
fix_float_precision(float) click to toggle source

HACK: Should fix encoded_polyline gem instead

# File lib/osrm/route.rb, line 25
def fix_float_precision(float)
  decimals = float.to_f.to_s[/\d+\z/]
  fixed_decimals = decimals.sub(/(\d)\1{5,}\d{,2}\z/, '')

  decimals == fixed_decimals ? float : float.round(fixed_decimals.size)
end