diff options
| author | Zakaria BOUZIANE | 2014-10-07 15:44:58 +0200 |
|---|---|---|
| committer | Zakaria BOUZIANE | 2014-10-07 15:44:58 +0200 |
| commit | d2eb3a6d8b7fca06712426d416302934a56a0a28 (patch) | |
| tree | 74074b2a9b8026ec6274ff456df7347fea37302f /app/exporters | |
| parent | bf37e97d8a86814b1bc2f844cbcff86ab0a43266 (diff) | |
| download | chouette-core-d2eb3a6d8b7fca06712426d416302934a56a0a28.tar.bz2 | |
HUB Export : SISMO profile
Diffstat (limited to 'app/exporters')
10 files changed, 235 insertions, 30 deletions
diff --git a/app/exporters/chouette/hub/connection_link_exporter.rb b/app/exporters/chouette/hub/connection_link_exporter.rb index c7d1820d8..e70c773b9 100644 --- a/app/exporters/chouette/hub/connection_link_exporter.rb +++ b/app/exporters/chouette/hub/connection_link_exporter.rb @@ -6,6 +6,8 @@ class Chouette::Hub::ConnectionLinkExporter @connection_link = connection_link @directory = directory @template = File.open('app/views/api/hub/correspondances.hub.erb' ){ |f| f.read } + @departure = Chouette::StopArea.find(@connection_link.departure_id) if @connection_link.departure_id + @arrival = Chouette::StopArea.find(@connection_link.arrival_id) if @connection_link.arrival_id end def render() diff --git a/app/exporters/chouette/hub/direction_exporter.rb b/app/exporters/chouette/hub/direction_exporter.rb new file mode 100644 index 000000000..27f89b4a1 --- /dev/null +++ b/app/exporters/chouette/hub/direction_exporter.rb @@ -0,0 +1,39 @@ +class Chouette::Hub::DirectionExporter + include ERB::Util + attr_accessor :journey_pattern, :directory, :template + + def initialize(journey_pattern, directory) + @journey_pattern = journey_pattern + @directory = directory + @template = File.open('app/views/api/hub/directions.hub.erb' ){ |f| f.read } + @arrival_stop_point = Chouette::StopPoint.find(@journey_pattern.arrival_stop_point_id) if @journey_pattern.arrival_stop_point_id + @direction = Chouette::StopArea.find(@arrival_stop_point.stop_area_id) if @arrival_stop_point + route = Chouette::Route.find(@journey_pattern.route_id) if @journey_pattern.route_id + @line = Chouette::Line.find(route.line_id) if route + end + + def render() + ERB.new(@template).result(binding) + end + + def hub_name + "/DIRECTION.TXT" + end + + def self.save( journey_patterns, directory, hub_export) + journey_patterns.each do |journey_pattern| + self.new( journey_pattern, directory).tap do |specific_exporter| + specific_exporter.save + end + end + hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|DIRECTION_COUNT", :arguments => {"0" => journey_patterns.size}) + end + + def save + File.open(directory + hub_name , "a") do |f| + f.write("DIRECTION\n") if f.size == 0 + f.write(render) + end if journey_pattern.present? + end +end + diff --git a/app/exporters/chouette/hub/exporter.rb b/app/exporters/chouette/hub/exporter.rb index 4dcc00045..8b9bc226e 100644 --- a/app/exporters/chouette/hub/exporter.rb +++ b/app/exporters/chouette/hub/exporter.rb @@ -30,15 +30,15 @@ class Chouette::Hub::Exporter def select_lines(object, ids) if object == "network" - ids.present? ? Chouette::Line.includes(:routes).where( :network_id => ids.split(",")).order(:name) : - Chouette::Line.joins(:network).includes(:routes).order(:name) + ids.present? ? Chouette::Line.includes(:routes).where( :network_id => ids.split(",")).order(:objectid) : + Chouette::Line.joins(:network).includes(:routes).order(:objectid) elsif object == "company" - ids.present? ? Chouette::Line.includes(:routes).where( :company_id => ids.split(",")).order(:name) : - Chouette::Line.joins(:company).includes(:routes).order(:name) + ids.present? ? Chouette::Line.includes(:routes).where( :company_id => ids.split(",")).order(:objectid) : + Chouette::Line.joins(:company).includes(:routes).order(:objectid) elsif object == "line" && ids.present? - Chouette::Line.includes(:routes).where( :id => ids.split(",")).order(:name) + Chouette::Line.includes(:routes).where( :id => ids.split(",")).order(:objectid) else - Chouette::Line.includes(:routes).order(:name) + Chouette::Line.includes(:routes).order(:objectid) end end @@ -81,9 +81,23 @@ class Chouette::Hub::Exporter @time_tables = select_time_tables(options[:start_date], options[:end_date]) @lines = select_lines( options[:o], options[:id] ) - @routes = lines.map(&:routes).flatten.sort {|a,b| (a.name && b.name) ? a.name <=> b.name : a.id <=> b.id} if lines_exportable? - @journey_patterns = Chouette::JourneyPattern.where(:route_id => routes.map(&:id)).order(:name) if routes_exportable? - @vehicle_journeys = Chouette::VehicleJourney.where(:route_id => routes.map(&:id)).order(:objectid) if routes_exportable? + + #@routes = @lines.map(&:routes).flatten.sort {|a,b| (a.name && b.name) ? a.name <=> b.name : a.id <=> b.id} if lines_exportable? + @routes = [] + if @lines + @lines.each { |line| @routes << Chouette::Route.where( "line_id = ?", line.id ) } + end + #@routes = @routes.flatten + + #@journey_patterns = Chouette::JourneyPattern.where(:route_id => @routes.map(&:id)).order(:objectid) if routes_exportable? + @journey_patterns = [] + if @routes + @routes.each { |subroutes| @journey_patterns << Chouette::JourneyPattern.where( :route_id => subroutes.map(&:id) ).order(:objectid) } + end + @journey_patterns = @journey_patterns.flatten + + @routes = @routes.flatten + @vehicle_journeys = Chouette::VehicleJourney.where(:route_id => @routes.map(&:id)).order(:objectid) if routes_exportable? vjs = [] tts = [] @@ -96,7 +110,7 @@ class Chouette::Hub::Exporter @time_tables = tts.flatten.uniq @vehicle_journeys = vjs.uniq - vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => @vehicle_journeys.map(&:id) ).order(:id) if vehicle_journeys_exportable? + vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => @vehicle_journeys.map(&:id) ) #.order(:id) if vehicle_journeys_exportable? if time_tables_exportable? Chouette::Hub::TimeTableExporter.save(@time_tables, temp_dir, hub_export) @@ -104,10 +118,19 @@ class Chouette::Hub::Exporter log_overflow_warning(Chouette::TimeTable) end + if journey_patterns_exportable? + Chouette::Hub::RouteExporter.save(@routes, temp_dir, hub_export) + Chouette::Hub::JourneyPatternExporter.save(@journey_patterns, temp_dir, hub_export) + Chouette::Hub::DirectionExporter.save(@journey_patterns, temp_dir, hub_export) + else + log_overflow_warning(Chouette::JourneyPattern) if routes_exportable? + end + if vehicle_journeys_exportable? Chouette::Hub::VehicleJourneyExporter.save(@vehicle_journeys, temp_dir, hub_export) - Chouette::Hub::VehicleJourneyAtStopExporter.save(vehicle_journey_at_stops, temp_dir, hub_export) Chouette::Hub::VehicleJourneyOperationExporter.save(@vehicle_journeys, temp_dir, hub_export) + #Chouette::Hub::VehicleJourneyAtStopExporter.save(vehicle_journey_at_stops, temp_dir, hub_export) + Chouette::Hub::VehicleJourneyAtStopExporter.save(@vehicle_journeys, temp_dir, hub_export, vehicle_journey_at_stops.count) else log_overflow_warning(Chouette::VehicleJourney) end @@ -119,16 +142,10 @@ class Chouette::Hub::Exporter Chouette::Hub::CommercialStopAreaExporter.save(commercial_stop_areas, temp_dir, hub_export) Chouette::Hub::PhysicalStopAreaExporter.save(physical_stop_areas, temp_dir, hub_export) - connection_links = Chouette::ConnectionLink.where( "departure_id IN (?) AND arrival_id IN (?)", (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)), (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)) ) + connection_links = Chouette::ConnectionLink.where( "departure_id IN (?) AND arrival_id IN (?)", (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)), (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)) ).order(:id) Chouette::Hub::ConnectionLinkExporter.save(connection_links, temp_dir, hub_export) - if journey_patterns_exportable? - Chouette::Hub::JourneyPatternExporter.save(@journey_patterns, temp_dir, hub_export) - else - log_overflow_warning(Chouette::JourneyPattern) if routes_exportable? - end - if lines_exportable? Chouette::Hub::LineExporter.save(@lines, temp_dir, hub_export) networks = Chouette::Network.where( :id => @lines.map(&:network_id)) diff --git a/app/exporters/chouette/hub/journey_pattern_exporter.rb b/app/exporters/chouette/hub/journey_pattern_exporter.rb index 03f20e6bf..27333d90e 100644 --- a/app/exporters/chouette/hub/journey_pattern_exporter.rb +++ b/app/exporters/chouette/hub/journey_pattern_exporter.rb @@ -7,6 +7,19 @@ class Chouette::Hub::JourneyPatternExporter @directory = directory @template = File.open('app/views/api/hub/chemins.hub.erb' ){ |f| f.read } @type = "COM" + if @journey_pattern.route + if @journey_pattern.route.line_id + @line = Chouette::Line.find(@journey_pattern.route.line_id) + end + end + @stop_areas = [] + if @journey_pattern.stop_points + @stop_points = @journey_pattern.stop_points.order(:position) + if @stop_points + @stop_points.each { |sp| @stop_areas << Chouette::StopArea.find(sp.stop_area_id) } + end + end + @stop_areas = @stop_areas.flatten end def render() diff --git a/app/exporters/chouette/hub/line_exporter.rb b/app/exporters/chouette/hub/line_exporter.rb index f8cf07b60..9804bf96c 100644 --- a/app/exporters/chouette/hub/line_exporter.rb +++ b/app/exporters/chouette/hub/line_exporter.rb @@ -6,6 +6,8 @@ class Chouette::Hub::LineExporter @line = line @directory = directory @template = File.open('app/views/api/hub/lignes.hub.erb' ){ |f| f.read } + @company = @line.company + @network = @line.network if (line.group_of_lines.count > 0) @group_of_line = line.group_of_lines[0].objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') end diff --git a/app/exporters/chouette/hub/physical_stop_area_exporter.rb b/app/exporters/chouette/hub/physical_stop_area_exporter.rb index 23e5d73ec..13e236b68 100644 --- a/app/exporters/chouette/hub/physical_stop_area_exporter.rb +++ b/app/exporters/chouette/hub/physical_stop_area_exporter.rb @@ -7,6 +7,9 @@ class Chouette::Hub::PhysicalStopAreaExporter @directory = directory @template = File.open('app/views/api/hub/arrets_physiques.hub.erb' ){ |f| f.read } @type = "NNNNNNNNNNNNNNNNNN" + if @stop_area.parent_id + @parent = Chouette::StopArea.find(@stop_area.parent_id) + end @stop_area.referential.projection_type = "27562" wgs84 = '+proj=lonlat +datum=WGS84 +ellps=WGS84' diff --git a/app/exporters/chouette/hub/route_exporter.rb b/app/exporters/chouette/hub/route_exporter.rb new file mode 100644 index 000000000..2d25df9e0 --- /dev/null +++ b/app/exporters/chouette/hub/route_exporter.rb @@ -0,0 +1,44 @@ +class Chouette::Hub::RouteExporter + include ERB::Util + attr_accessor :route, :directory, :template + + def initialize(route, directory) + @route = route + @directory = directory + @template = File.open('app/views/api/hub/schemas.hub.erb' ){ |f| f.read } + @line = Chouette::Line.find(@route.line_id) if @route.line_id + @stop_areas = [] + if @route.stop_points + @stop_points = @route.stop_points.order(:position) + if @stop_points + @stop_points.each { |sp| @stop_areas << Chouette::StopArea.find(sp.stop_area_id) } + end + end + @stop_areas = @stop_areas.flatten + end + + def render() + ERB.new(@template).result(binding) + end + + def hub_name + "/SCHEMA.TXT" + end + + def self.save( routes, directory, hub_export) + routes.each do |route| + self.new( route, directory).tap do |specific_exporter| + specific_exporter.save + end + end + hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|SCHEMA_COUNT", :arguments => {"0" => routes.size}) + end + + def save + File.open(directory + hub_name , "a") do |f| + f.write("SCHEMA\n") if f.size == 0 + f.write(render) + end if route.present? + end +end + diff --git a/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb index 12cb5e1df..25e3bb864 100644 --- a/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb +++ b/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb @@ -2,11 +2,16 @@ class Chouette::Hub::VehicleJourneyAtStopExporter include ERB::Util attr_accessor :vehicle_journey_at_stop, :directory, :template - def initialize(vehicle_journey_at_stop, directory) + def initialize(vehicle_journey_at_stop, directory, index, id) @vehicle_journey_at_stop = vehicle_journey_at_stop @directory = directory + @vehicle_journey_num = index + @vehicle_journey_id = id @template = File.open('app/views/api/hub/horaires.hub.erb' ) { |f| f.read } - @stop_area_code = Chouette::StopArea.find(@vehicle_journey_at_stop.stop_point.stop_area_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') + stop_point = @vehicle_journey_at_stop.stop_point + stop_area = stop_point.stop_area + @stop_area_code = stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if stop_area + @stop_area_id = stop_area.id if stop_area @arrival_time = @vehicle_journey_at_stop.arrival_time.sec + 60 * @vehicle_journey_at_stop.arrival_time.min + 60 * 60 * @vehicle_journey_at_stop.arrival_time.hour @arrival_type = "A" @departure_time = @vehicle_journey_at_stop.departure_time.sec + 60 * @vehicle_journey_at_stop.departure_time.min + 60 * 60 * @vehicle_journey_at_stop.departure_time.hour @@ -21,13 +26,23 @@ class Chouette::Hub::VehicleJourneyAtStopExporter "/HORAIRE.TXT" end - def self.save( vehicle_journey_at_stops, directory, hub_export) - vehicle_journey_at_stops.each do |vehicle_journey_at_stop| - self.new( vehicle_journey_at_stop, directory).tap do |specific_exporter| - specific_exporter.save + def self.save( vehicle_journeys, directory, hub_export, vehicle_journey_at_stops_count) + id = 1 + vehicle_journeys.each_index do |index| + vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => vehicle_journeys[index].id ).order(:arrival_time) + vehicle_journey_at_stops.each do |vehicle_journey_at_stop| + self.new( vehicle_journey_at_stop, directory, index, id).tap do |specific_exporter| + specific_exporter.save + id += 1 + end end end - hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_AT_STOP_COUNT", :arguments => {"0" => vehicle_journey_at_stops.size}) + #vehicle_journey_at_stops.each do |vehicle_journey_at_stop| + # self.new( vehicle_journey_at_stop, directory).tap do |specific_exporter| + # specific_exporter.save + # end + #end + hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_AT_STOP_COUNT", :arguments => {"0" => vehicle_journey_at_stops_count}) end def save diff --git a/app/exporters/chouette/hub/vehicle_journey_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_exporter.rb index 96b458953..b710b2d7a 100644 --- a/app/exporters/chouette/hub/vehicle_journey_exporter.rb +++ b/app/exporters/chouette/hub/vehicle_journey_exporter.rb @@ -19,16 +19,27 @@ class Chouette::Hub::VehicleJourneyExporter @departure_time_sec = departure_time.sec + ( departure_time.min + departure_time.hour * 60 ) * 60 @arrival_time_sec = arrival_time.sec + ( arrival_time.min + arrival_time.hour * 60 ) * 60 @validity = 0 - @vehicle_journey.time_tables.map(&:int_day_types).each { |v| @validity += v } + @vehicle_journey.time_tables.map(&:int_day_types).each { |v| @validity |= v } - periods = Chouette::TimeTablePeriod.where( :time_table_id => @vehicle_journey.time_tables.map(&:id) ).map(&:id) + periods = Chouette::TimeTable.where( :id => @vehicle_journey.time_tables.map(&:id) ).map(&:objectid) @periods = "" unless periods.empty? - @periods += periods[0].to_s + @periods += periods[0].sub(/(\w*\:\w*\:)(\w*)/, '\2') periods.shift end unless periods.empty? - periods.each { |p| @periods += "|" + p.to_s } + periods.each { |p| @periods += "|" + p.sub(/(\w*\:\w*\:)(\w*)/, '\2') } + end + # USE @renvoi for PMR and TAD and create RENVOI.TXT File + @renvoi = "" + if @vehicle_journey.mobility_restricted_suitability + @renvoi = "1" + end + File.open(directory + "/RENVOI.TXT" , "a") do |f| + if f.size == 0 + f.write("RENVOI\n") + f.write("a:PMR:1\n") + end end end diff --git a/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb index 3a45f2cab..37b4cc8f9 100644 --- a/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb +++ b/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb @@ -7,6 +7,65 @@ class Chouette::Hub::VehicleJourneyOperationExporter @number = index @directory = directory @template = File.open('app/views/api/hub/courses_operations.hub.erb' ) { |f| f.read } + # HUB TMode vs. Neptune TMode + # transport_mode = "TAD_PMR" if (@vehicle_journey.flexible_service && @vehicle_journey.mobility_restricted_suitability) # SISMO profile : NO TAD_PMR MODE. + if @vehicle_journey.flexible_service + transport_mode = "TAD" + else + case @vehicle_journey.transport_mode + when "Interchange" + transport_mode = "" + when "Unknown" + transport_mode = "" + when "Coach" + if @vehicle_journey.mobility_restricted_suitability + transport_mode = "CAR_PMR" + else + transport_mode = "CAR" + end + when "Air" + transport_mode = "AVION" + when "Waterborne" + transport_mode = "BATEAU" + when "Bus" + if @vehicle_journey.mobility_restricted_suitability + transport_mode = "BUS_PMR" + else + transport_mode = "BUS" + end + when "Ferry" + transport_mode = "BATEAU" + when "Walk" + transport_mode = "" + when "Metro" + transport_mode = "METRO" + when "Shuttle" + transport_mode = "" + when "RapidTransit" + transport_mode = "" + when "Taxi" + transport_mode = "TAXIBUS" + when "LocalTrain" + transport_mode = "TRAIN" + when "Train" + transport_mode = "TRAIN" + when "LongDistance_train" + transport_mode = "TRAIN" + when "Tramway" + transport_mode = "TRAM" + when "Trolleybus" + transport_mode = "TROLLEY" + when "PrivateVehicle" + transport_mode = "" + when "Bicycle" + transport_mode = "VELO" + when "Other" + transport_mode = "" + else + transport_mode = "" + end + end + @transport_mode = transport_mode end def render() @@ -28,7 +87,7 @@ class Chouette::Hub::VehicleJourneyOperationExporter # specific_exporter.save # end #end - hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_COUNT", :arguments => {"0" => vehicle_journeys.size}) + hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_OPERATION_COUNT", :arguments => {"0" => vehicle_journeys.size}) end def save |
