earth 0.6.6 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/earth.gemspec +1 -1
- data/lib/earth/air/flight_distance_class.rb +1 -1
- data/lib/earth/air/flight_distance_class/data_miner.rb +3 -2
- data/lib/earth/air/flight_seat_class/data_miner.rb +4 -29
- data/lib/earth/air/flight_segment.rb +4 -0
- data/lib/earth/automobile.rb +1 -0
- data/lib/earth/automobile/automobile_fuel/data_miner.rb +3 -3
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +1 -1
- data/lib/earth/locality.rb +3 -0
- data/lib/earth/locality/country.rb +32 -9
- data/lib/earth/locality/country/data_miner.rb +38 -2
- data/lib/earth/locality/country_rail_class.rb +18 -0
- data/lib/earth/locality/country_rail_class/data_miner.rb +16 -0
- data/lib/earth/locality/country_rail_traction.rb +13 -0
- data/lib/earth/locality/country_rail_traction/data_miner.rb +34 -0
- data/lib/earth/locality/country_rail_traction_class.rb +14 -0
- data/lib/earth/locality/country_rail_traction_class/data_miner.rb +35 -0
- data/lib/earth/locality/data_miner.rb +3 -0
- data/lib/earth/locality/zip_code.rb +9 -7
- data/lib/earth/rail.rb +8 -0
- data/lib/earth/rail/data_miner.rb +9 -0
- data/lib/earth/rail/national_transit_database_company.rb +37 -0
- data/lib/earth/rail/national_transit_database_company/data_miner.rb +12 -0
- data/lib/earth/rail/national_transit_database_mode.rb +12 -0
- data/lib/earth/rail/national_transit_database_mode/data_miner.rb +10 -0
- data/lib/earth/rail/national_transit_database_record.rb +41 -0
- data/lib/earth/rail/national_transit_database_record/data_miner.rb +57 -0
- data/lib/earth/rail/rail_class.rb +2 -63
- data/lib/earth/rail/rail_class/data_miner.rb +13 -12
- data/lib/earth/rail/rail_company.rb +26 -0
- data/lib/earth/rail/rail_company/data_miner.rb +98 -0
- data/lib/earth/rail/rail_company_traction.rb +12 -0
- data/lib/earth/rail/rail_company_traction/data_miner.rb +4 -0
- data/lib/earth/rail/rail_company_traction_class.rb +14 -0
- data/lib/earth/rail/rail_company_traction_class/data_miner.rb +4 -0
- data/lib/earth/rail/rail_fuel.rb +18 -0
- data/lib/earth/rail/rail_fuel/data_miner.rb +36 -0
- data/lib/earth/rail/rail_traction.rb +5 -0
- data/lib/earth/rail/rail_traction/data_miner.rb +21 -0
- data/lib/earth/version.rb +1 -1
- data/spec/earth_spec.rb +14 -2
- metadata +46 -30
@@ -1 +1,10 @@
|
|
1
1
|
require 'earth/rail/rail_class/data_miner'
|
2
|
+
require 'earth/rail/rail_company/data_miner'
|
3
|
+
require 'earth/rail/rail_company_traction/data_miner'
|
4
|
+
require 'earth/rail/rail_company_traction_class/data_miner'
|
5
|
+
require 'earth/rail/rail_class/data_miner'
|
6
|
+
require 'earth/rail/rail_fuel/data_miner'
|
7
|
+
require 'earth/rail/rail_traction/data_miner'
|
8
|
+
require 'earth/rail/national_transit_database_company/data_miner'
|
9
|
+
require 'earth/rail/national_transit_database_mode/data_miner'
|
10
|
+
require 'earth/rail/national_transit_database_record/data_miner'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class NationalTransitDatabaseCompany < ActiveRecord::Base
|
2
|
+
set_primary_key :id
|
3
|
+
set_table_name :ntd_companies
|
4
|
+
|
5
|
+
has_many :ntd_records, :foreign_key => 'company_id', :primary_key => 'id', :class_name => 'NationalTransitDatabaseRecord'
|
6
|
+
|
7
|
+
def self.rail_companies
|
8
|
+
NationalTransitDatabaseRecord.rail_records.map(&:ntd_company).uniq
|
9
|
+
end
|
10
|
+
|
11
|
+
def rail_records
|
12
|
+
ntd_records.where(:mode_code => NationalTransitDatabaseMode.rail_modes)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Methods to calculate summary statistics from rail_records
|
16
|
+
[:rail_passengers, :rail_passenger_distance, :rail_vehicle_distance, :rail_vehicle_time, :rail_electricity, :rail_diesel].each do |method|
|
17
|
+
define_method method do
|
18
|
+
attribute = method.to_s.split('rail_')[1].to_sym
|
19
|
+
rail_records.sum(attribute) > 0 ? rail_records.sum(attribute) : nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Methods to look up units from from rail_records
|
24
|
+
[:rail_passenger_distance_units, :rail_vehicle_distance_units, :rail_vehicle_time_units, :rail_electricity_units, :rail_diesel_units].each do |method|
|
25
|
+
define_method method do
|
26
|
+
attribute = method.to_s.split('rail_')[1].to_sym
|
27
|
+
units = rail_records.map(&attribute).uniq
|
28
|
+
(units.count == 1 and units[0].present?) ? units[0] : raise("Error: units missing or multiple units in #{name}'s NTD records")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
col :id
|
33
|
+
col :name
|
34
|
+
col :acronym
|
35
|
+
col :zip_code_name
|
36
|
+
col :duns_number
|
37
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
NationalTransitDatabaseCompany.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "US transit companies from the National Transit Database",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdHBTZC1GUzg5VEU4QW9NOUo3V1BJWUE&output=csv' do
|
5
|
+
key 'id', :field_name => 'trs_id'
|
6
|
+
store 'name', :nullify => true
|
7
|
+
store 'acronym', :nullify => true
|
8
|
+
store 'zip_code_name', :nullify => true
|
9
|
+
store 'duns_number', :nullify => true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
NationalTransitDatabaseMode.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "National Transit Database modes",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGFTLVpMdFgwSTQzTTFuc2lIVUdfSHc&output=csv' do
|
5
|
+
key 'code'
|
6
|
+
store 'name', :nullify => true
|
7
|
+
store 'rail_mode', :nullify => true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class NationalTransitDatabaseRecord < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
set_table_name :ntd_records
|
4
|
+
|
5
|
+
belongs_to :ntd_company, :foreign_key => 'company_id', :class_name => 'NationalTransitDatabaseCompany'
|
6
|
+
|
7
|
+
def self.rail_records
|
8
|
+
where(:mode_code => NationalTransitDatabaseMode.rail_modes)
|
9
|
+
end
|
10
|
+
|
11
|
+
col :name
|
12
|
+
col :company_id
|
13
|
+
col :mode_code
|
14
|
+
col :service_type
|
15
|
+
col :vehicle_distance, :type => :float
|
16
|
+
col :vehicle_distance_units
|
17
|
+
col :vehicle_time, :type => :float
|
18
|
+
col :vehicle_time_units
|
19
|
+
col :passenger_distance, :type => :float
|
20
|
+
col :passenger_distance_units
|
21
|
+
col :passengers, :type => :float
|
22
|
+
col :electricity, :type => :float
|
23
|
+
col :electricity_units
|
24
|
+
col :diesel, :type => :float
|
25
|
+
col :diesel_units
|
26
|
+
col :gasoline, :type => :float
|
27
|
+
col :gasoline_units
|
28
|
+
col :lpg, :type => :float
|
29
|
+
col :lpg_units
|
30
|
+
col :lng, :type => :float
|
31
|
+
col :lng_units
|
32
|
+
col :cng, :type => :float
|
33
|
+
col :cng_units
|
34
|
+
col :kerosene, :type => :float
|
35
|
+
col :kerosene_units
|
36
|
+
col :biodiesel, :type => :float
|
37
|
+
col :biodiesel_units
|
38
|
+
col :other_fuel, :type => :float
|
39
|
+
col :other_fuel_units
|
40
|
+
col :other_fuel_description
|
41
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
NationalTransitDatabaseRecord.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "US National Transit Database service data",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdF9Hbktvc3BMNDRWZHhDRU9uMVZfWVE&output=csv' do
|
5
|
+
key 'name', :synthesize => lambda { |row| [row['trs_id'], row['mode_code'], row['service_code']].join(' ') }
|
6
|
+
store 'company_id', :field_name => 'trs_id'
|
7
|
+
store 'mode_code'
|
8
|
+
store 'service_type', :field_name => 'service_code', :dictionary => { :input => 'code', :output => 'name', :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDBTZENxb3A1SzJaNTVEVGZ5cTdaMVE&output=csv' }
|
9
|
+
store 'vehicle_distance', :field_name => 'vehicle_or_train_revenue_miles', :units => 'miles'
|
10
|
+
store 'vehicle_time', :field_name => 'vehicle_or_train_revenue_hours', :units => 'hours'
|
11
|
+
store 'passenger_distance', :field_name => 'passenger_miles', :units => 'miles'
|
12
|
+
store 'passengers'
|
13
|
+
end
|
14
|
+
|
15
|
+
import "US National Transit Database fuel consumption data",
|
16
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDItVVR5NjA2Y3FCVjgza25Ccy0zS2c&output=csv' do
|
17
|
+
key 'name', :synthesize => lambda { |row| [row['trs_id'], row['mode_code'], row['service_code']].join(' ') }
|
18
|
+
store 'company_id', :field_name => 'trs_id'
|
19
|
+
store 'mode_code'
|
20
|
+
store 'service_type', :field_name => 'service_code', :dictionary => { :input => 'code', :output => 'name', :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDBTZENxb3A1SzJaNTVEVGZ5cTdaMVE&output=csv' }
|
21
|
+
store 'electricity', :synthesize => lambda { |row| row['electricity_kwh'].to_f + row['battery_kwh'].to_f }, :units => 'kilowatt_hours', :nullify => true
|
22
|
+
store 'diesel', :field_name => 'diesel_gallons', :units => 'gallons', :nullify => true
|
23
|
+
store 'gasoline', :field_name => 'gasoline_gallons', :units => 'gallons', :nullify => true
|
24
|
+
store 'lpg', :field_name => 'lpg_gallons', :units => 'gallons', :nullify => true
|
25
|
+
store 'lng', :field_name => 'lng_gallons', :units => 'gallons', :nullify => true
|
26
|
+
store 'cng', :field_name => 'cng_gallons', :units => 'gallons', :nullify => true
|
27
|
+
store 'kerosene', :field_name => 'kerosene_gallons', :units => 'gallons', :nullify => true
|
28
|
+
store 'biodiesel', :field_name => 'biodiesel_gallons', :units => 'gallons', :nullify => true
|
29
|
+
store 'other_fuel', :nullify => true
|
30
|
+
store 'other_fuel_description', :field_name => 'other_fuel_description', :nullify => true
|
31
|
+
end
|
32
|
+
|
33
|
+
process "Convert miles to kilometres" do
|
34
|
+
conversion_factor = 1.miles.to(:kilometres)
|
35
|
+
%{ vehicle_distance passenger_distance }.split.each do |field|
|
36
|
+
connection.execute %{
|
37
|
+
UPDATE #{table_name}
|
38
|
+
SET #{field} = #{field} * #{conversion_factor},
|
39
|
+
#{field}_units = 'kilometres'
|
40
|
+
WHERE #{field}_units = 'miles'
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
process "Convert gallons to litres" do
|
46
|
+
conversion_factor = 1.gallons.to(:litres)
|
47
|
+
%{ diesel gasoline lpg lng cng kerosene biodiesel }.split.each do |fuel|
|
48
|
+
connection.execute %{
|
49
|
+
UPDATE #{table_name}
|
50
|
+
SET #{fuel} = #{fuel} * #{conversion_factor},
|
51
|
+
#{fuel}_units = 'litres'
|
52
|
+
WHERE #{fuel}_units = 'gallons'
|
53
|
+
}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,66 +1,5 @@
|
|
1
1
|
class RailClass < ActiveRecord::Base
|
2
2
|
set_primary_key :name
|
3
|
-
col :name
|
4
|
-
col :description
|
5
|
-
col :passengers, :type => :float
|
6
|
-
col :distance, :type => :float
|
7
|
-
col :distance_units
|
8
|
-
col :speed, :type => :float
|
9
|
-
col :speed_units
|
10
|
-
col :electricity_intensity, :type => :float
|
11
|
-
col :electricity_intensity_units
|
12
|
-
col :diesel_intensity, :type => :float
|
13
|
-
col :diesel_intensity_units
|
14
|
-
|
15
|
-
# verify "Passengers, distance, speed, and electricity intensity should be greater than zero" do
|
16
|
-
# RailClass.all.each do |rail_class|
|
17
|
-
# %w{ passengers distance speed electricity_intensity }.each do |attribute|
|
18
|
-
# value = rail_class.send(:"#{attribute}")
|
19
|
-
# unless value > 0
|
20
|
-
# raise "Invalid #{attribute} for RailClass #{rail_class.name}: #{value} (should be > 0)"
|
21
|
-
# end
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# verify "Distance units should be kilometres" do
|
27
|
-
# RailClass.all.each do |rail_class|
|
28
|
-
# unless rail_class.distance_units == "kilometres"
|
29
|
-
# raise "Invalid distance units for RailClass #{rail_class.name}: #{rail_class.distance_units} (should be kilometres)"
|
30
|
-
# end
|
31
|
-
# end
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# verify "Speed units should be kilometres per hour" do
|
35
|
-
# RailClass.all.each do |rail_class|
|
36
|
-
# unless rail_class.speed_units == "kilometres_per_hour"
|
37
|
-
# raise "Invalid speed units for RailClass #{rail_class.name}: #{rail_class.speed_units} (should be kilometres_per_hour)"
|
38
|
-
# end
|
39
|
-
# end
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# verify "Electricity intensity units should be kilowatt hours per kilometre" do
|
43
|
-
# RailClass.all.each do |rail_class|
|
44
|
-
# unless rail_class.electricity_intensity_units == "kilowatt_hours_per_kilometre"
|
45
|
-
# raise "Invalid electricity intensity units for RailClass #{rail_class.name}: #{rail_class.electricity_intensity_units} (should be kilowatt_hours_per_kilometre)"
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# verify "Diesel intensity should be zero or more" do
|
51
|
-
# RailClass.all.each do |rail_class|
|
52
|
-
# unless rail_class.diesel_intensity >= 0
|
53
|
-
# raise "Invalid diesel intensity for RailClass #{rail_class.name}: #{rail_class.diesel_intensity} (should be > 0)"
|
54
|
-
# end
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# verify "Diesel intensity units should be litres per kilometre" do
|
59
|
-
# RailClass.all.each do |rail_class|
|
60
|
-
# unless rail_class.diesel_intensity_units == "litres_per_kilometre"
|
61
|
-
# raise "Invalid distance units for RailClass #{rail_class.name}: #{rail_class.diesel_intensity_units} (should be litres_per_kilometre)"
|
62
|
-
# end
|
63
|
-
# end
|
64
|
-
# end
|
65
3
|
|
66
|
-
|
4
|
+
col :name
|
5
|
+
end
|
@@ -1,18 +1,19 @@
|
|
1
1
|
RailClass.class_eval do
|
2
2
|
data_miner do
|
3
|
-
process "
|
4
|
-
|
3
|
+
process "Ensure CountryRailClass, CountryRailTractionClass, and RailCompanyTractionClass are populated" do
|
4
|
+
CountryRailTractionClass.run_data_miner!
|
5
|
+
CountryRailClass.run_data_miner!
|
6
|
+
RailCompanyTractionClass.run_data_miner!
|
5
7
|
end
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
store 'diesel_intensity', :units_field_name => 'diesel_intensity_units'
|
8
|
+
|
9
|
+
process "Derive rail class names from CountryRailClass, CountryRailTractionClass, and RailCompanyTractionClass" do
|
10
|
+
names = []
|
11
|
+
names += CountryRailTractionClass.select("DISTINCT rail_class_name").map(&:rail_class_name)
|
12
|
+
names += CountryRailClass.select("DISTINCT rail_class_name").map(&:rail_class_name)
|
13
|
+
names += RailCompanyTractionClass.select("DISTINCT rail_class_name").map(&:rail_class_name)
|
14
|
+
names.uniq.each do |name|
|
15
|
+
RailClass.find_or_create_by_name(name)
|
16
|
+
end
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class RailCompany < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
|
4
|
+
belongs_to :country, :foreign_key => 'country_iso_3166_code'
|
5
|
+
|
6
|
+
col :name
|
7
|
+
col :country_iso_3166_code
|
8
|
+
col :duns_number
|
9
|
+
col :passengers, :type => :float
|
10
|
+
col :passenger_distance, :type => :float
|
11
|
+
col :passenger_distance_units
|
12
|
+
col :trip_distance, :type => :float
|
13
|
+
col :trip_distance_units
|
14
|
+
col :train_distance, :type => :float
|
15
|
+
col :train_distance_units
|
16
|
+
col :train_time, :type => :float
|
17
|
+
col :train_time_units
|
18
|
+
col :speed, :type => :float
|
19
|
+
col :speed_units
|
20
|
+
col :electricity_intensity, :type => :float
|
21
|
+
col :electricity_intensity_units
|
22
|
+
col :diesel_intensity, :type => :float
|
23
|
+
col :diesel_intensity_units
|
24
|
+
col :co2_emission_factor, :type => :float
|
25
|
+
col :co2_emission_factor_units
|
26
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
RailCompany.class_eval do
|
2
|
+
data_miner do
|
3
|
+
import "european rail company data from the UIC",
|
4
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDRpVkd3T0p1RDY4RzUzc0VUUVEwYmc&output=csv' do
|
5
|
+
key 'name'
|
6
|
+
store 'country_iso_3166_code'
|
7
|
+
store 'passengers', :nullify => true
|
8
|
+
store 'passenger_distance', :nullify => true, :units_field_name => 'passenger_distance_units'
|
9
|
+
store 'train_distance', :nullify => true, :units_field_name => 'train_distance_units'
|
10
|
+
end
|
11
|
+
|
12
|
+
import "Amtrak data",
|
13
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdGZ3UDdJT1NETUtELWVTLUR4R3RZbEE&output=csv' do
|
14
|
+
key 'name'
|
15
|
+
store 'country_iso_3166_code'
|
16
|
+
store 'passengers', :nullify => true
|
17
|
+
store 'passenger_distance', :nullify => true, :units_field_name => 'passenger_distance_units'
|
18
|
+
store 'train_distance', :nullify => true, :units_field_name => 'train_distance_units'
|
19
|
+
store 'train_time', :nullify => true, :units_field_name => 'train_time_units'
|
20
|
+
store 'electricity_intensity', :nullify => true, :units_field_name => 'electricity_intensity_units'
|
21
|
+
store 'diesel_intensity', :nullify => true, :units_field_name => 'diesel_intensity_units'
|
22
|
+
end
|
23
|
+
|
24
|
+
process "Ensure the National Transit Database data is imported" do
|
25
|
+
NationalTransitDatabaseRecord.run_data_miner!
|
26
|
+
NationalTransitDatabaseCompany.run_data_miner!
|
27
|
+
NationalTransitDatabaseMode.run_data_miner!
|
28
|
+
end
|
29
|
+
|
30
|
+
process "Derive US transit rail company data from the National Transit Database" do
|
31
|
+
NationalTransitDatabaseCompany.rail_companies.each do |ntd_company|
|
32
|
+
company = RailCompany.find_or_create_by_name(ntd_company.name)
|
33
|
+
company.country_iso_3166_code = 'US'
|
34
|
+
company.duns_number = ntd_company.duns_number
|
35
|
+
company.passengers = ntd_company.rail_passengers
|
36
|
+
company.passenger_distance = ntd_company.rail_passenger_distance
|
37
|
+
company.passenger_distance_units = ntd_company.rail_passenger_distance_units
|
38
|
+
company.train_distance = ntd_company.rail_vehicle_distance
|
39
|
+
company.train_distance_units = ntd_company.rail_vehicle_distance_units
|
40
|
+
company.train_time = ntd_company.rail_vehicle_time
|
41
|
+
company.train_time_units = ntd_company.rail_vehicle_time_units
|
42
|
+
|
43
|
+
if ntd_company.rail_electricity.present? and ntd_company.rail_electricity > 0 and ntd_company.rail_passenger_distance > 0
|
44
|
+
company.electricity_intensity = ntd_company.rail_electricity / ntd_company.rail_passenger_distance
|
45
|
+
company.electricity_intensity_units = "#{ntd_company.rail_electricity_units}_per_passenger_#{ntd_company.rail_passenger_distance_units.singularize}"
|
46
|
+
end
|
47
|
+
|
48
|
+
if ntd_company.rail_diesel.present? and ntd_company.rail_diesel > 0 and ntd_company.rail_passenger_distance > 0
|
49
|
+
company.diesel_intensity = ntd_company.rail_diesel / ntd_company.rail_passenger_distance
|
50
|
+
company.diesel_intensity_units = "#{ntd_company.rail_diesel_units}_per_passenger_#{ntd_company.rail_passenger_distance_units.singularize}"
|
51
|
+
end
|
52
|
+
|
53
|
+
company.save!
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
process "Calculate average trip distance" do
|
58
|
+
RailCompany.find_each do |company|
|
59
|
+
if company.passenger_distance.present? and company.passengers.present? and company.passengers > 0
|
60
|
+
company.trip_distance = company.passenger_distance / company.passengers
|
61
|
+
company.trip_distance_units = company.passenger_distance_units
|
62
|
+
company.save!
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
process "Calculate average trip speed" do
|
68
|
+
RailCompany.find_each do |company|
|
69
|
+
if company.train_distance.present? and company.train_time.present? and company.train_time > 0
|
70
|
+
company.speed = company.train_distance / company.train_time
|
71
|
+
company.speed_units = "#{company.train_distance_units}_per_#{company.train_time_units.singularize}"
|
72
|
+
company.save!
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
process "Ensure RailFuel is populated" do
|
78
|
+
RailFuel.run_data_miner!
|
79
|
+
end
|
80
|
+
|
81
|
+
process "Calculate co2 emission factor for US rail companies" do
|
82
|
+
RailCompany.where(:country_iso_3166_code => 'US').find_each do |company|
|
83
|
+
company.co2_emission_factor = 0
|
84
|
+
|
85
|
+
if company.diesel_intensity.present?
|
86
|
+
company.co2_emission_factor += company.diesel_intensity * RailFuel.find_by_name("diesel").co2_emission_factor
|
87
|
+
end
|
88
|
+
|
89
|
+
if company.electricity_intensity.present?
|
90
|
+
company.co2_emission_factor += company.electricity_intensity * (EgridSubregion.fallback.electricity_co2_emission_factor / (1 - EgridRegion.fallback.loss_factor))
|
91
|
+
end
|
92
|
+
|
93
|
+
company.co2_emission_factor_units = 'kilograms_per_passenger_kilometre'
|
94
|
+
company.save!
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class RailCompanyTraction < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
col :name
|
4
|
+
col :rail_company_name
|
5
|
+
col :rail_traction_name
|
6
|
+
col :electricity_intensity, :type => :float
|
7
|
+
col :electricity_intensity_units
|
8
|
+
col :diesel_intensity, :type => :float
|
9
|
+
col :diesel_intensity_units
|
10
|
+
col :co2_emission_factor, :type => :float
|
11
|
+
col :co2_emission_factor_units
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class RailCompanyTractionClass < ActiveRecord::Base
|
2
|
+
set_primary_key :name
|
3
|
+
|
4
|
+
col :name
|
5
|
+
col :rail_company_name
|
6
|
+
col :rail_traction_name
|
7
|
+
col :rail_class_name
|
8
|
+
col :electricity_intensity, :type => :float
|
9
|
+
col :electricity_intensity_units
|
10
|
+
col :diesel_intensity, :type => :float
|
11
|
+
col :diesel_intensity_units
|
12
|
+
col :co2_emission_factor, :type => :float
|
13
|
+
col :co2_emission_factor_units
|
14
|
+
end
|