aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tom_tom/batch.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tom_tom/batch.rb')
-rw-r--r--lib/tom_tom/batch.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/tom_tom/batch.rb b/lib/tom_tom/batch.rb
new file mode 100644
index 000000000..6ceb9c226
--- /dev/null
+++ b/lib/tom_tom/batch.rb
@@ -0,0 +1,54 @@
+module TomTom
+ class Batch
+ def initialize(connection)
+ @connection = connection
+ end
+
+ def batch(way_costs)
+ params = URI.encode_www_form({
+ travelMode: 'bus',
+ routeType: 'shortest'
+ })
+ batch_items = convert_way_costs(way_costs).map do |locations|
+ {
+ query: "/calculateRoute/#{locations}/json?#{params}"
+ }
+ end
+
+ response = @connection.post do |req|
+ req.url '/routing/1/batch/json'
+ req.headers['Content-Type'] = 'application/json'
+ req.body = {
+ batchItems: batch_items
+ }.to_json
+ end
+
+ extract_costs_to_way_costs!(
+ way_costs,
+ JSON.parse(response.body)
+ )
+ end
+
+ def extract_costs_to_way_costs!(way_costs, batch_json)
+ calculated_routes = batch_json['batchItems']
+ calculated_routes.each_with_index do |route, i|
+ next if route['statusCode'] != 200
+
+ distance = route['response']['routes'][0]['summary']['lengthInMeters']
+ time = route['response']['routes'][0]['summary']['travelTimeInSeconds']
+
+ way_costs[i].distance = distance
+ way_costs[i].time = time
+ end
+
+ way_costs
+ end
+
+ def convert_way_costs(way_costs)
+ way_costs.map do |way_cost|
+ "#{way_cost.departure.lat},#{way_cost.departure.lng}" \
+ ":#{way_cost.arrival.lat},#{way_cost.arrival.lng}"
+ end
+ end
+ end
+end