earth 0.11.9 → 0.11.10
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/conversions_ext.rb +3 -0
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response.rb +4 -2
- data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response/data_miner.rb +2 -2
- data/lib/earth/locality/climate_division.rb +6 -4
- data/lib/earth/locality/climate_division/data_miner.rb +2 -3
- data/lib/earth/locality/country.rb +23 -0
- data/lib/earth/locality/country/data_miner.rb +27 -1
- data/lib/earth/version.rb +1 -1
- data/spec/earth/locality/country_spec.rb +22 -0
- data/spec/spec_helper.rb +26 -3
- data/vendor/geokit-rails/lib/geokit-rails.rb +4 -4
- metadata +7 -7
data/earth.gemspec
CHANGED
@@ -5,7 +5,7 @@ require "earth/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "earth"
|
7
7
|
s.version = Earth::VERSION
|
8
|
-
s.date = "2012-01-
|
8
|
+
s.date = "2012-01-26"
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.authors = ["Seamus Abshere", "Derek Kastner", "Andy Rossmeissl"]
|
11
11
|
s.email = %q{andy@rossmeissl.net}
|
@@ -31,6 +31,9 @@ Conversions.register :dollars, :cents, 100.0
|
|
31
31
|
# GHG
|
32
32
|
Conversions.register :carbon, :co2, (44.0 / 12.0)
|
33
33
|
|
34
|
+
# Temperature
|
35
|
+
Conversions.register :degrees_celsius, :degrees_fahrenheit, (9.0 / 5.0) # NOTE: only for conversion between degrees NOT temperatures: 1 degree C = 9/5 degrees F but a temperature of 1 degree C = temperature of 33.8 degrees F
|
36
|
+
|
34
37
|
# Complex
|
35
38
|
Conversions.register :kilometres_per_litre, :miles_per_gallon, (1.kilometres.to(:miles) / 1.litres.to(:gallons))
|
36
39
|
Conversions.register :litres_per_kilometre, :gallons_per_mile, (1.litres.to(:gallons) / 1.kilometres.to(:miles))
|
@@ -14,8 +14,10 @@ class CommercialBuildingEnergyConsumptionSurveyResponse < ActiveRecord::Base
|
|
14
14
|
col :census_region_number, :type => :integer
|
15
15
|
col :census_division_number, :type => :integer
|
16
16
|
col :climate_zone_number, :type => :integer
|
17
|
-
col :heating_degree_days, :type => :
|
18
|
-
col :
|
17
|
+
col :heating_degree_days, :type => :float
|
18
|
+
col :heating_degree_days_units
|
19
|
+
col :cooling_degree_days, :type => :float
|
20
|
+
col :cooling_degree_days_units
|
19
21
|
col :construction_year, :type => :integer
|
20
22
|
col :area, :type => :float
|
21
23
|
col :area_units
|
data/lib/earth/hospitality/commercial_building_energy_consumption_survey_response/data_miner.rb
CHANGED
@@ -40,8 +40,8 @@ CommercialBuildingEnergyConsumptionSurveyResponse.class_eval do
|
|
40
40
|
:skip => 1,
|
41
41
|
:headers => ["PUBID8", "REGION8", "CENDIV8", "SQFT8", "SQFTC8", "YRCONC8", "PBA8", "ELUSED8", "NGUSED8", "FKUSED8", "PRUSED8", "STUSED8", "HWUSED8", "ADJWT8", "STRATUM8", "PAIR8", "HDD658", "CDD658", "MFUSED8", "MFBTU8", "MFEXP8", "ELCNS8", "ELBTU8", "ELEXP8", "ZELCNS8", "ZELEXP8"] do
|
42
42
|
key 'id', :field_name => 'PUBID8'
|
43
|
-
store 'heating_degree_days', :field_name => 'HDD658'
|
44
|
-
store 'cooling_degree_days', :field_name => 'CDD658'
|
43
|
+
store 'heating_degree_days', :field_name => 'HDD658', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
44
|
+
store 'cooling_degree_days', :field_name => 'CDD658', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
45
45
|
store 'electricity_use', :synthesize => Proc.new { |row| row['ELCNS8'].to_i }, :units => :kilowatt_hours
|
46
46
|
store 'electricity_energy', :field_name => 'ELBTU8', :from_units => :kbtus, :to_units => :megajoules
|
47
47
|
end
|
@@ -7,12 +7,12 @@ class ClimateDivision < ActiveRecord::Base
|
|
7
7
|
RADIUS = 750
|
8
8
|
|
9
9
|
def climate_zone_number
|
10
|
-
if cooling_degree_days < 2000
|
11
|
-
if heating_degree_days > 7000
|
10
|
+
if cooling_degree_days < 2000.degrees_fahrenheit.to(:degrees_celsius)
|
11
|
+
if heating_degree_days > 7000.degrees_fahrenheit.to(:degrees_celsius)
|
12
12
|
1
|
13
|
-
elsif heating_degree_days > 5499
|
13
|
+
elsif heating_degree_days > 5499.degrees_fahrenheit.to(:degrees_celsius)
|
14
14
|
2
|
15
|
-
elsif heating_degree_days > 3999
|
15
|
+
elsif heating_degree_days > 3999.degrees_fahrenheit.to(:degrees_celsius)
|
16
16
|
3
|
17
17
|
else
|
18
18
|
4
|
@@ -24,6 +24,8 @@ class ClimateDivision < ActiveRecord::Base
|
|
24
24
|
|
25
25
|
col :name
|
26
26
|
col :heating_degree_days, :type => :float
|
27
|
+
col :heating_degree_days_units
|
27
28
|
col :cooling_degree_days, :type => :float
|
29
|
+
col :cooling_degree_days_units
|
28
30
|
col :state_postal_abbreviation
|
29
31
|
end
|
@@ -3,10 +3,9 @@ ClimateDivision.class_eval do
|
|
3
3
|
import "a list of climate divisions and their average heating and cooling degree days",
|
4
4
|
:url => 'http://static.brighterplanet.com/science/data/climate/climate_divisions/climate_divisions.csv' do
|
5
5
|
key 'name'
|
6
|
-
store 'heating_degree_days'
|
7
|
-
store 'cooling_degree_days'
|
6
|
+
store 'heating_degree_days', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
7
|
+
store 'cooling_degree_days', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
8
8
|
store 'state_postal_abbreviation'
|
9
9
|
end
|
10
|
-
#associate :state, :key => :state_postal_abbreviation, :foreign_key => :postal_abbreviation
|
11
10
|
end
|
12
11
|
end
|
@@ -1,12 +1,31 @@
|
|
1
1
|
require 'earth/automobile'
|
2
2
|
require 'earth/hospitality'
|
3
3
|
require 'earth/rail'
|
4
|
+
|
4
5
|
class Country < ActiveRecord::Base
|
5
6
|
set_primary_key :iso_3166_code
|
6
7
|
|
7
8
|
has_many :rail_companies, :foreign_key => 'country_iso_3166_code' # used to calculate rail data
|
8
9
|
has_many :lodging_classes, :foreign_key => 'country_iso_3166_code', :class_name => 'CountryLodgingClass'
|
9
10
|
|
11
|
+
def climate_zone_number
|
12
|
+
if heating_degree_days and cooling_degree_days
|
13
|
+
if cooling_degree_days < 2000.degrees_fahrenheit.to(:degrees_celsius)
|
14
|
+
if heating_degree_days > 7000.degrees_fahrenheit.to(:degrees_celsius)
|
15
|
+
1
|
16
|
+
elsif heating_degree_days > 5499.degrees_fahrenheit.to(:degrees_celsius)
|
17
|
+
2
|
18
|
+
elsif heating_degree_days > 3999.degrees_fahrenheit.to(:degrees_celsius)
|
19
|
+
3
|
20
|
+
else
|
21
|
+
4
|
22
|
+
end
|
23
|
+
else
|
24
|
+
5
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
10
29
|
falls_back_on :name => 'fallback',
|
11
30
|
:automobile_urbanity => lambda { united_states.automobile_urbanity }, # for now assume US represents world
|
12
31
|
:automobile_fuel_efficiency => ((22.5 + 16.2) / 2.0).miles_per_gallon.to(:kilometres_per_litre), # average of passenger car fuel unknown and light goods vehicle fuel unknown - WRI Mobile Combustion calculation tool v2.0
|
@@ -49,6 +68,10 @@ class Country < ActiveRecord::Base
|
|
49
68
|
col :iso_3166_numeric_code, :type => :integer # numeric like 826; aka UN M49 code
|
50
69
|
col :iso_3166_alpha_3_code # 3-letter like GBR
|
51
70
|
col :name
|
71
|
+
col :heating_degree_days, :type => :float
|
72
|
+
col :heating_degree_days_units
|
73
|
+
col :cooling_degree_days, :type => :float
|
74
|
+
col :cooling_degree_days_units
|
52
75
|
col :automobile_urbanity, :type => :float # float from 0 to 1
|
53
76
|
col :automobile_fuel_efficiency, :type => :float
|
54
77
|
col :automobile_fuel_efficiency_units
|
@@ -18,6 +18,32 @@ Country.class_eval do
|
|
18
18
|
store 'name', :field_number => 5 # romanized version
|
19
19
|
end
|
20
20
|
|
21
|
+
import "heating degree day data from WRI CAIT",
|
22
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDN4MkRTSWtWRjdfazhRdWllTkVSMkE&output=csv',
|
23
|
+
:select => Proc.new { |record| record['country'] != 'European Union (27)' },
|
24
|
+
:errata => { :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDNSMUtCV0h4cUF4UnBKZlNkczlNbFE&output=csv' } do
|
25
|
+
key 'name', :field_name => 'country'
|
26
|
+
store 'heating_degree_days', :units => :degrees_celsius
|
27
|
+
end
|
28
|
+
|
29
|
+
import "cooling degree day data from WRI CAIT",
|
30
|
+
:url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDN4MkRTSWtWRjdfazhRdWllTkVSMkE&output=csv',
|
31
|
+
:select => Proc.new { |record| record['country'] != 'European Union (27)' },
|
32
|
+
:errata => { :url => 'https://docs.google.com/spreadsheet/pub?key=0AoQJbWqPrREqdDNSMUtCV0h4cUF4UnBKZlNkczlNbFE&output=csv' } do
|
33
|
+
key 'name', :field_name => 'country'
|
34
|
+
store 'cooling_degree_days', :units => :degrees_celsius
|
35
|
+
end
|
36
|
+
|
37
|
+
process "set Montenegro's heating and cooling degree days to the same as Serbia's" do
|
38
|
+
montenegro = Country.find 'ME'
|
39
|
+
serbia = Country.find 'RS'
|
40
|
+
montenegro.heating_degree_days = serbia.heating_degree_days
|
41
|
+
montenegro.heating_degree_days_units = serbia.heating_degree_days_units
|
42
|
+
montenegro.cooling_degree_days = serbia.cooling_degree_days
|
43
|
+
montenegro.cooling_degree_days_units = serbia.cooling_degree_days_units
|
44
|
+
montenegro.save!
|
45
|
+
end
|
46
|
+
|
21
47
|
# AUTOMOBILE
|
22
48
|
import "automobile-related data for the US",
|
23
49
|
:url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDdZRm1tNjY0c2dYNG00bXJ3TXRqUVE&gid=0&output=csv' do
|
@@ -77,7 +103,7 @@ Country.class_eval do
|
|
77
103
|
row['electricity_co2_emission_factor'].to_f +
|
78
104
|
(row['electricity_ch4_emission_factor'].to_f * GreenhouseGas[:ch4].global_warming_potential) +
|
79
105
|
(row['electricity_n2o_emission_factor'].to_f * GreenhouseGas[:n2o].global_warming_potential)
|
80
|
-
) / (1 - row['loss_factor'].to_f) }, :
|
106
|
+
) / (1 - row['loss_factor'].to_f) }, :units => 'kilograms_co2e_per_kilowatt_hour'
|
81
107
|
end
|
82
108
|
|
83
109
|
process "Ensure EgridSubregion is populated" do
|
data/lib/earth/version.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'earth/locality'
|
3
|
+
require 'earth/locality/data_miner'
|
4
|
+
|
5
|
+
describe Country do
|
6
|
+
describe 'import', :slow => true do
|
7
|
+
it 'should import data' do
|
8
|
+
Earth.init 'locality', :load_data_miner => true, :apply_schemas => true
|
9
|
+
Country.run_data_miner!
|
10
|
+
Country.all.count.should == 249
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should correctly determine climate zone number' do
|
14
|
+
Country.find('LT').climate_zone_number.should == 1
|
15
|
+
Country.find('HU').climate_zone_number.should == 2
|
16
|
+
Country.find('HR').climate_zone_number.should == 3
|
17
|
+
Country.find('CY').climate_zone_number.should == 4
|
18
|
+
Country.find('UZ').climate_zone_number.should == 5
|
19
|
+
Country.where(:heating_degree_days => nil).first.climate_zone_number.should == nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,13 +8,36 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
8
8
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
9
|
require 'earth'
|
10
10
|
|
11
|
+
case ENV['EARTH_DB_ADAPTER']
|
12
|
+
when 'mysql'
|
13
|
+
adapter = 'mysql'
|
14
|
+
database = 'test_earth'
|
15
|
+
username = 'root'
|
16
|
+
password = 'password'
|
17
|
+
|
18
|
+
# system %{mysql -u #{username} -p#{password} -e "DROP DATABASE #{database}"}
|
19
|
+
# system %{mysql -u #{username} -p#{password} -e "CREATE DATABASE #{database}"}
|
20
|
+
else
|
21
|
+
adapter = 'sqlite3'
|
22
|
+
database = ':memory:'
|
23
|
+
username = nil
|
24
|
+
password = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
config = {
|
28
|
+
'encoding' => 'utf8',
|
29
|
+
'adapter' => adapter,
|
30
|
+
'database' => database,
|
31
|
+
}
|
32
|
+
config['username'] = username if username
|
33
|
+
config['password'] = password if password
|
34
|
+
|
35
|
+
ActiveRecord::Base.establish_connection config
|
36
|
+
|
11
37
|
logger = Logger.new 'log/test.log'
|
12
38
|
logger.level = Logger::DEBUG
|
13
39
|
|
14
|
-
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
15
|
-
|
16
40
|
ActiveRecord::Base.logger = logger
|
17
|
-
|
18
41
|
DataMiner.logger = logger
|
19
42
|
|
20
43
|
RSpec.configure do |c|
|
@@ -7,10 +7,10 @@
|
|
7
7
|
#
|
8
8
|
require 'geokit'
|
9
9
|
if defined? Geokit
|
10
|
-
require 'geokit-rails/defaults'
|
11
|
-
require 'geokit-rails/adapters/abstract'
|
12
|
-
require 'geokit-rails/acts_as_mappable'
|
13
|
-
require 'geokit-rails/ip_geocode_lookup'
|
10
|
+
require File.expand_path('../geokit-rails/defaults', __FILE__)
|
11
|
+
require File.expand_path('../geokit-rails/adapters/abstract', __FILE__)
|
12
|
+
require File.expand_path('../geokit-rails/acts_as_mappable', __FILE__)
|
13
|
+
require File.expand_path('../geokit-rails/ip_geocode_lookup', __FILE__)
|
14
14
|
|
15
15
|
# Automatically mix in distance finder support into ActiveRecord classes.
|
16
16
|
ActiveRecord::Base.send :include, GeoKit::ActsAsMappable
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: earth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.11.
|
5
|
+
version: 0.11.10
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Seamus Abshere
|
@@ -12,8 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2012-01-
|
16
|
-
default_executable:
|
15
|
+
date: 2012-01-26 00:00:00 Z
|
17
16
|
dependencies:
|
18
17
|
- !ruby/object:Gem::Dependency
|
19
18
|
name: data_miner
|
@@ -584,6 +583,7 @@ files:
|
|
584
583
|
- spec/earth/bus/bus_fuel_year_control_spec.rb
|
585
584
|
- spec/earth/industry/mecs_energy_spec.rb
|
586
585
|
- spec/earth/industry/mecs_ratio_spec.rb
|
586
|
+
- spec/earth/locality/country_spec.rb
|
587
587
|
- spec/earth/pet/species_spec.rb
|
588
588
|
- spec/earth_spec.rb
|
589
589
|
- spec/spec_helper.rb
|
@@ -633,7 +633,6 @@ files:
|
|
633
633
|
- vendor/geokit-rails/test/schema.rb
|
634
634
|
- vendor/geokit-rails/test/tasks.rake
|
635
635
|
- vendor/geokit-rails/test/test_helper.rb
|
636
|
-
has_rdoc: true
|
637
636
|
homepage: https://github.com/brighterplanet/earth
|
638
637
|
licenses: []
|
639
638
|
|
@@ -647,7 +646,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
647
646
|
requirements:
|
648
647
|
- - ">="
|
649
648
|
- !ruby/object:Gem::Version
|
650
|
-
hash:
|
649
|
+
hash: 1670776732781702788
|
651
650
|
segments:
|
652
651
|
- 0
|
653
652
|
version: "0"
|
@@ -656,14 +655,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
656
655
|
requirements:
|
657
656
|
- - ">="
|
658
657
|
- !ruby/object:Gem::Version
|
659
|
-
hash:
|
658
|
+
hash: 1670776732781702788
|
660
659
|
segments:
|
661
660
|
- 0
|
662
661
|
version: "0"
|
663
662
|
requirements: []
|
664
663
|
|
665
664
|
rubyforge_project:
|
666
|
-
rubygems_version: 1.
|
665
|
+
rubygems_version: 1.8.15
|
667
666
|
signing_key:
|
668
667
|
specification_version: 3
|
669
668
|
summary: Land, sky, and sea
|
@@ -758,6 +757,7 @@ test_files:
|
|
758
757
|
- spec/earth/bus/bus_fuel_year_control_spec.rb
|
759
758
|
- spec/earth/industry/mecs_energy_spec.rb
|
760
759
|
- spec/earth/industry/mecs_ratio_spec.rb
|
760
|
+
- spec/earth/locality/country_spec.rb
|
761
761
|
- spec/earth/pet/species_spec.rb
|
762
762
|
- spec/earth_spec.rb
|
763
763
|
- spec/spec_helper.rb
|