aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette/vehicle_journey.rb
diff options
context:
space:
mode:
authorZog2018-03-26 17:04:55 +0200
committerZog2018-03-26 17:04:55 +0200
commitb183db0b268d581cd06131f5094deff820e03483 (patch)
tree447c5fefef971cbeca4f87df28e72c0eab302646 /app/models/chouette/vehicle_journey.rb
parentdd4768576baed54f9b0f40efa645b85d5a2fd273 (diff)
downloadchouette-core-b183db0b268d581cd06131f5094deff820e03483.tar.bz2
Refs #6217; Add a method to fill blanks in journeys passing times
When a passing time at a border can be extrapolated from other values.
Diffstat (limited to 'app/models/chouette/vehicle_journey.rb')
-rw-r--r--app/models/chouette/vehicle_journey.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index 525036077..be05d4053 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -346,6 +346,33 @@ module Chouette
end
end
+ def fill_passing_time_at_borders
+ encountered_borders = []
+ previous_stop = nil
+ vehicle_journey_at_stops.each do |vjas|
+ sp = vjas.stop_point
+ if sp.stop_area.area_type == "border"
+ encountered_borders << vjas
+ else
+ if encountered_borders.any?
+ before_cost = journey_pattern.costs_between previous_stop.stop_point, encountered_borders.first.stop_point
+ after_cost = journey_pattern.costs_between encountered_borders.last.stop_point, sp
+ if before_cost && before_cost[:distance] && after_cost && after_cost[:distance]
+ before_distance = before_cost[:distance].to_f
+ after_distance = after_cost[:distance].to_f
+ time = previous_stop.departure_time + before_distance / (before_distance+after_distance) * (vjas.arrival_time - previous_stop.departure_time)
+ encountered_borders.each do |b|
+ b.update_attribute :arrival_time, time
+ b.update_attribute :departure_time, time
+ end
+ end
+ encountered_borders = []
+ end
+ previous_stop = vjas
+ end
+ end
+ end
+
def self.matrix(vehicle_journeys)
Hash[*VehicleJourneyAtStop.where(vehicle_journey_id: vehicle_journeys.pluck(:id)).map do |vjas|
[ "#{vjas.vehicle_journey_id}-#{vjas.stop_point_id}", vjas]