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

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