Class: FlightSegment

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
Earth::Model
Defined in:
lib/earth/air/flight_segment.rb

Constant Summary collapse

TABLE_STRUCTURE =
<<-EOS

CREATE TABLE flight_segments
  (
     row_hash                          CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
     origin_airport_iata_code          CHARACTER VARYING(255),
     origin_airport_city               CHARACTER VARYING(255),
     origin_country_iso_3166_code      CHARACTER VARYING(255),
     destination_airport_iata_code     CHARACTER VARYING(255),
     destination_airport_city          CHARACTER VARYING(255),
     destination_country_iso_3166_code CHARACTER VARYING(255),
     airline_bts_code                  CHARACTER VARYING(255),
     airline_icao_code                 CHARACTER VARYING(255),
     airline_name                      CHARACTER VARYING(255), /* text description derived from bts or icao code */
     aircraft_bts_code                 CHARACTER VARYING(255),
     aircraft_description              CHARACTER VARYING(255), /* text description derived from BTS T100 or ICAO TFS */
     flights                           INTEGER,                /* number of flights over month or year */
     passengers                        INTEGER,                /* total passengers on all flights */
     seats                             INTEGER,                /* total seats on all flights */
     seats_per_flight                  FLOAT,                  /* average seats per flight */
     load_factor                       FLOAT,                  /* passengers / seats */
     freight_share                     FLOAT,                  /* (freight + mail) / (freight + mail + (passengers * average passenger weight)) */
     distance                          FLOAT,
     distance_units                    CHARACTER VARYING(255),
     payload_capacity                  FLOAT,                  /* aircraft maximum payload capacity rating */
     payload_capacity_units            CHARACTER VARYING(255),
     freight                           FLOAT,                  /* total freight on all flights performed */
     freight_units                     CHARACTER VARYING(255),
     mail                              FLOAT,                  /* total mail on all flights performed */
     mail_units                        CHARACTER VARYING(255),
     month                             INTEGER,
     year                              INTEGER,
     source                            CHARACTER VARYING(255)  /* 'BTS T100' or 'ICAO TFS' */
  );
CREATE INDEX index_flight_segments_on_origin_airport_iata_code ON flight_segments (origin_airport_iata_code);
CREATE INDEX index_flight_segments_on_origin_airport_city ON flight_segments (origin_airport_city);
CREATE INDEX index_flight_segments_on_destination_airport_iata_code ON flight_segments (destination_airport_iata_code);
CREATE INDEX index_flight_segments_on_destination_airport_city ON flight_segments (destination_airport_city);
CREATE INDEX index_flight_segments_on_airline_bts_code ON flight_segments (airline_bts_code);
CREATE INDEX index_flight_segments_on_airline_icao_code ON flight_segments (airline_icao_code);
CREATE INDEX index_flight_segments_on_airline_name ON flight_segments (airline_name);
CREATE INDEX index_flight_segments_on_aircraft_bts_code ON flight_segments (aircraft_bts_code);
CREATE INDEX index_flight_segments_on_aircraft_description ON flight_segments (aircraft_description);
CREATE INDEX index_flight_segments_on_year ON flight_segments (year)

EOS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Earth::Model

extend_mining, extended, registry

Class Method Details

.update_averages!Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/earth/air/flight_segment.rb', line 64

def update_averages!
  # Derive load factor, which is passengers divided by available seats
  where('seats > 0').update_all 'load_factor = 1.0 * passengers / seats'
  
  # Assume a load factor of 1 where passengers > available seats
  where('passengers > seats AND seats > 0').update_all 'load_factor = 1'
  
  # Derive freight share as a fraction of the total weight carried -- assume 90.718474 kg (200 lbs) per passenger (includes checked baggage)
  # FIXME TODO assume 100 kg per passenger?
  where('(freight + mail + passengers) > 0').update_all 'freight_share = 1.0 * (freight + mail) / (freight + mail + (passengers * 90.718474))'
  
  # Derive average seats per flight
  where('flights > 0').update_all 'seats_per_flight = 1.0 * seats / flights'
end

Instance Method Details

#airlineObject



80
81
82
83
84
85
86
# File 'lib/earth/air/flight_segment.rb', line 80

def airline
  if airline_bts_code
    Airline.where(:bts_code => airline_bts_code).first
  else
    Airline.where(:icao_code => airline_icao_code).first
  end
end