earth 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/Rakefile +0 -3
- data/TODO +1 -1
- data/ar17.html +2093 -0
- data/data/air/aircraft.csv +7 -0
- data/data/air/airports.csv +1 -0
- data/earth.gemspec +4 -3
- data/errata/airline/bts_carrier_codes_errata.csv +74 -10
- data/errata/airport/openflights_errata.csv +7 -0
- data/errata/flight_segment/bts_errata.csv +1 -0
- data/lib/earth/air/aircraft.rb +1 -1
- data/lib/earth/air/aircraft/data_miner.rb +1 -1
- data/lib/earth/air/airline.rb +1 -1
- data/lib/earth/air/airline/data_miner.rb +6 -10
- data/lib/earth/air/airport.rb +6 -6
- data/lib/earth/air/bts_aircraft.rb +1 -1
- data/lib/earth/air/flight_segment.rb +1 -1
- data/lib/earth/automobile/automobile_activity_year_type.rb +1 -1
- data/lib/earth/automobile/automobile_activity_year_type_fuel/data_miner.rb +3 -3
- data/lib/earth/automobile/automobile_make_model_year_variant.rb +2 -2
- data/lib/earth/automobile/automobile_make_model_year_variant/data_miner.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_year.rb +1 -1
- data/lib/earth/automobile/automobile_type_fuel_year/data_miner.rb +2 -2
- data/lib/earth/automobile/automobile_type_fuel_year_control.rb +1 -1
- data/lib/earth/insolation_scopes.rb +10 -0
- data/lib/earth/loader.rb +0 -7
- data/lib/earth/locality/climate_division.rb +3 -3
- data/lib/earth/locality/climate_division_month.rb +28 -0
- data/lib/earth/locality/climate_division_month/data_miner.rb +140 -0
- data/lib/earth/locality/direct_normal_insolation.rb +37 -0
- data/lib/earth/locality/direct_normal_insolation/data_miner.rb +41 -0
- data/lib/earth/locality/egrid_subregion.rb +4 -1
- data/lib/earth/locality/electricity_mix.rb +9 -1
- data/lib/earth/locality/global_horizontal_insolation.rb +37 -0
- data/lib/earth/locality/global_horizontal_insolation/data_miner.rb +41 -0
- data/lib/earth/locality/photovoltaic_insolation.rb +37 -0
- data/lib/earth/locality/photovoltaic_insolation/data_miner.rb +41 -0
- data/lib/earth/locality/zip_code.rb +9 -15
- data/lib/earth/residence/residence_fuel_price.rb +1 -1
- data/lib/earth/tasks.rb +5 -0
- data/lib/earth/version.rb +1 -1
- data/spec/data_mining_spec.rb +1 -1
- data/spec/earth/air/aircraft_spec.rb +2 -2
- data/spec/earth/air/airline_spec.rb +1 -1
- data/spec/earth/air/airport_spec.rb +1 -1
- data/spec/earth/air/bts_aircraft_spec.rb +1 -1
- data/spec/earth/air/flight_segment_spec.rb +19 -21
- data/spec/earth/automobile/automobile_make_model_year_variant_spec.rb +1 -1
- data/spec/earth/locality/climate_division_month_spec.rb +23 -0
- data/spec/earth/locality/direct_normal_insolation_spec.rb +8 -0
- data/spec/earth/locality/global_horizontal_insolation_spec.rb +8 -0
- data/spec/earth/locality/photovoltaic_insolation_spec.rb +8 -0
- data/spec/earth/locality/zip_code_spec.rb +1 -10
- data/spec/earth_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +261 -410
- data/data/air/airlines.csv +0 -45
- data/vendor/geokit-rails/.gitignore +0 -2
- data/vendor/geokit-rails/CHANGELOG.rdoc +0 -49
- data/vendor/geokit-rails/MIT-LICENSE +0 -20
- data/vendor/geokit-rails/README.markdown +0 -569
- data/vendor/geokit-rails/Rakefile +0 -18
- data/vendor/geokit-rails/about.yml +0 -11
- data/vendor/geokit-rails/assets/api_keys_template +0 -61
- data/vendor/geokit-rails/init.rb +0 -2
- data/vendor/geokit-rails/install.rb +0 -14
- data/vendor/geokit-rails/lib/geokit-rails.rb +0 -28
- data/vendor/geokit-rails/lib/geokit-rails/acts_as_mappable.rb +0 -469
- data/vendor/geokit-rails/lib/geokit-rails/adapters/abstract.rb +0 -31
- data/vendor/geokit-rails/lib/geokit-rails/adapters/mysql.rb +0 -22
- data/vendor/geokit-rails/lib/geokit-rails/adapters/mysql2.rb +0 -22
- data/vendor/geokit-rails/lib/geokit-rails/adapters/postgresql.rb +0 -22
- data/vendor/geokit-rails/lib/geokit-rails/adapters/sqlserver.rb +0 -43
- data/vendor/geokit-rails/lib/geokit-rails/defaults.rb +0 -22
- data/vendor/geokit-rails/lib/geokit-rails/geocoder_control.rb +0 -16
- data/vendor/geokit-rails/lib/geokit-rails/ip_geocode_lookup.rb +0 -46
- data/vendor/geokit-rails/test/acts_as_mappable_test.rb +0 -474
- data/vendor/geokit-rails/test/boot.rb +0 -25
- data/vendor/geokit-rails/test/database.yml +0 -25
- data/vendor/geokit-rails/test/fixtures/companies.yml +0 -7
- data/vendor/geokit-rails/test/fixtures/custom_locations.yml +0 -54
- data/vendor/geokit-rails/test/fixtures/locations.yml +0 -54
- data/vendor/geokit-rails/test/fixtures/mock_addresses.yml +0 -17
- data/vendor/geokit-rails/test/fixtures/mock_families.yml +0 -2
- data/vendor/geokit-rails/test/fixtures/mock_houses.yml +0 -9
- data/vendor/geokit-rails/test/fixtures/mock_organizations.yml +0 -5
- data/vendor/geokit-rails/test/fixtures/mock_people.yml +0 -5
- data/vendor/geokit-rails/test/fixtures/stores.yml +0 -0
- data/vendor/geokit-rails/test/ip_geocode_lookup_test.rb +0 -77
- data/vendor/geokit-rails/test/models/company.rb +0 -3
- data/vendor/geokit-rails/test/models/custom_location.rb +0 -12
- data/vendor/geokit-rails/test/models/location.rb +0 -4
- data/vendor/geokit-rails/test/models/mock_address.rb +0 -4
- data/vendor/geokit-rails/test/models/mock_family.rb +0 -3
- data/vendor/geokit-rails/test/models/mock_house.rb +0 -3
- data/vendor/geokit-rails/test/models/mock_organization.rb +0 -4
- data/vendor/geokit-rails/test/models/mock_person.rb +0 -4
- data/vendor/geokit-rails/test/models/store.rb +0 -3
- data/vendor/geokit-rails/test/schema.rb +0 -60
- data/vendor/geokit-rails/test/tasks.rake +0 -31
- data/vendor/geokit-rails/test/test_helper.rb +0 -23
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'earth/model'
|
2
|
+
|
3
|
+
require 'earth/locality/climate_division'
|
4
|
+
|
5
|
+
class ClimateDivisionMonth < ActiveRecord::Base
|
6
|
+
extend Earth::Model
|
7
|
+
|
8
|
+
TABLE_STRUCTURE = <<-EOS
|
9
|
+
CREATE TABLE climate_division_months
|
10
|
+
(
|
11
|
+
name CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
|
12
|
+
climate_division_name CHARACTER VARYING(255),
|
13
|
+
year INTEGER,
|
14
|
+
month INTEGER,
|
15
|
+
heating_degree_days FLOAT,
|
16
|
+
heating_degree_days_units CHARACTER VARYING(255),
|
17
|
+
cooling_degree_days FLOAT,
|
18
|
+
cooling_degree_days_units CHARACTER VARYING(255)
|
19
|
+
);
|
20
|
+
EOS
|
21
|
+
|
22
|
+
self.primary_key = "name"
|
23
|
+
|
24
|
+
belongs_to :climate_division, :foreign_key => 'climate_division_name'
|
25
|
+
|
26
|
+
warn_unless_size (344 * (((Date.today.year - 2011) * 12) + (Date.today - 7).prev_month.month))
|
27
|
+
warn_if_any_nulls
|
28
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
ClimateDivisionMonth.class_eval do
|
2
|
+
# Derived from state code table in ftp://ftp.ncdc.noaa.gov/pub/data/cirs/divisional.README
|
3
|
+
STATE_CODES = {
|
4
|
+
1 => 'AL',
|
5
|
+
2 => 'AZ',
|
6
|
+
3 => 'AR',
|
7
|
+
4 => 'CA',
|
8
|
+
5 => 'CO',
|
9
|
+
6 => 'CT',
|
10
|
+
7 => 'DE',
|
11
|
+
8 => 'FL',
|
12
|
+
9 => 'GA',
|
13
|
+
10 => 'ID',
|
14
|
+
11 => 'IL',
|
15
|
+
12 => 'IN',
|
16
|
+
13 => 'IA',
|
17
|
+
14 => 'KS',
|
18
|
+
15 => 'KY',
|
19
|
+
16 => 'LA',
|
20
|
+
17 => 'ME',
|
21
|
+
18 => 'MD',
|
22
|
+
19 => 'MA',
|
23
|
+
20 => 'MI',
|
24
|
+
21 => 'MN',
|
25
|
+
22 => 'MS',
|
26
|
+
23 => 'MO',
|
27
|
+
24 => 'MT',
|
28
|
+
25 => 'NE',
|
29
|
+
26 => 'NV',
|
30
|
+
27 => 'NH',
|
31
|
+
28 => 'NJ',
|
32
|
+
29 => 'NM',
|
33
|
+
30 => 'NY',
|
34
|
+
31 => 'NC',
|
35
|
+
32 => 'ND',
|
36
|
+
33 => 'OH',
|
37
|
+
34 => 'OK',
|
38
|
+
35 => 'OR',
|
39
|
+
36 => 'PA',
|
40
|
+
37 => 'RI',
|
41
|
+
38 => 'SC',
|
42
|
+
39 => 'SD',
|
43
|
+
40 => 'TN',
|
44
|
+
41 => 'TX',
|
45
|
+
42 => 'UT',
|
46
|
+
43 => 'VT',
|
47
|
+
44 => 'VA',
|
48
|
+
45 => 'WA',
|
49
|
+
46 => 'WV',
|
50
|
+
47 => 'WI',
|
51
|
+
48 => 'WY'
|
52
|
+
}
|
53
|
+
|
54
|
+
MONTH_CODES = {
|
55
|
+
'jan' => 1,
|
56
|
+
'feb' => 2,
|
57
|
+
'mar' => 3,
|
58
|
+
'apr' => 4,
|
59
|
+
'may' => 5,
|
60
|
+
'jun' => 6,
|
61
|
+
'jul' => 7,
|
62
|
+
'aug' => 8,
|
63
|
+
'sep' => 9,
|
64
|
+
'oct' => 10,
|
65
|
+
'nov' => 11,
|
66
|
+
'dec' => 12
|
67
|
+
}
|
68
|
+
|
69
|
+
::FixedWidth.define :noaa_degree_day_data do |d|
|
70
|
+
d.rows do |row|
|
71
|
+
row.trap { true } # there's only one section
|
72
|
+
row.column 'state_code', 2, :type => :integer
|
73
|
+
row.column 'division_number', 2, :type => :integer
|
74
|
+
row.column 'element_code', 2, :type => :integer
|
75
|
+
row.column 'year', 4, :type => :integer
|
76
|
+
row.column 'jan', 7, :type => :float # value for jan
|
77
|
+
row.column 'feb', 7, :type => :float # value for feb
|
78
|
+
row.column 'mar', 7, :type => :float # value for mar
|
79
|
+
row.column 'apr', 7, :type => :float # value for apr
|
80
|
+
row.column 'may', 7, :type => :float # value for may
|
81
|
+
row.column 'jun', 7, :type => :float # value for jun
|
82
|
+
row.column 'jul', 7, :type => :float # value for jul
|
83
|
+
row.column 'aug', 7, :type => :float # value for aug
|
84
|
+
row.column 'sep', 7, :type => :float # value for sep
|
85
|
+
row.column 'oct', 7, :type => :float # value for oct
|
86
|
+
row.column 'nov', 7, :type => :float # value for nov
|
87
|
+
row.column 'dec', 7, :type => :float # value for dec
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class NoaaDegreeDayParser
|
92
|
+
def initialize(options = {})
|
93
|
+
# nothing
|
94
|
+
end
|
95
|
+
|
96
|
+
def apply(row)
|
97
|
+
virtual_rows = []
|
98
|
+
if row['year'].to_i > 2010
|
99
|
+
%w{ jan feb mar apr may jun jul aug sep oct nov dec }.each do |month|
|
100
|
+
if row[month].to_i >= 0
|
101
|
+
new_row = ActiveSupport::OrderedHash.new
|
102
|
+
new_row['climate_division_name'] = STATE_CODES[row['state_code'].to_i] + row['division_number'].to_i.to_s
|
103
|
+
new_row['year'] = row['year']
|
104
|
+
new_row['month'] = MONTH_CODES[month]
|
105
|
+
new_row['name'] = new_row['climate_division_name'] + '-' + new_row['year'] + '-' + new_row['month'].to_s
|
106
|
+
new_row['degree_days'] = row[month]
|
107
|
+
virtual_rows << new_row
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
virtual_rows
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
data_miner do
|
116
|
+
import "recent NOAA NCDC climate division heating degree day data",
|
117
|
+
:url => 'ftp://ftp.ncdc.noaa.gov/pub/data/cirs/drd964x.hdd.txt',
|
118
|
+
:format => :fixed_width,
|
119
|
+
:schema_name => :noaa_degree_day_data,
|
120
|
+
:transform => { :class => NoaaDegreeDayParser } do
|
121
|
+
key 'name'
|
122
|
+
store 'climate_division_name'
|
123
|
+
store 'year'
|
124
|
+
store 'month'
|
125
|
+
store 'heating_degree_days', :field_name => 'degree_days', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
126
|
+
end
|
127
|
+
|
128
|
+
import "recent NOAA NCDC climate division cooling degree day data",
|
129
|
+
:url => 'ftp://ftp.ncdc.noaa.gov/pub/data/cirs/drd964x.cdd.txt',
|
130
|
+
:format => :fixed_width,
|
131
|
+
:schema_name => :noaa_degree_day_data,
|
132
|
+
:transform => { :class => NoaaDegreeDayParser } do
|
133
|
+
key 'name'
|
134
|
+
store 'climate_division_name'
|
135
|
+
store 'year'
|
136
|
+
store 'month'
|
137
|
+
store 'cooling_degree_days', :field_name => 'degree_days', :from_units => :degrees_fahrenheit, :to_units => :degrees_celsius
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'earth/model'
|
2
|
+
require 'earth/insolation_scopes'
|
3
|
+
|
4
|
+
class DirectNormalInsolation < ActiveRecord::Base
|
5
|
+
extend Earth::Model
|
6
|
+
include Earth::InsolationScopes
|
7
|
+
|
8
|
+
TABLE_STRUCTURE = <<-EOS
|
9
|
+
CREATE TABLE direct_normal_insolations
|
10
|
+
(
|
11
|
+
row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
|
12
|
+
nw_lat FLOAT,
|
13
|
+
nw_lon FLOAT,
|
14
|
+
se_lat FLOAT,
|
15
|
+
se_lon FLOAT,
|
16
|
+
jan_average FLOAT,
|
17
|
+
feb_average FLOAT,
|
18
|
+
mar_average FLOAT,
|
19
|
+
apr_average FLOAT,
|
20
|
+
may_average FLOAT,
|
21
|
+
jun_average FLOAT,
|
22
|
+
jul_average FLOAT,
|
23
|
+
aug_average FLOAT,
|
24
|
+
sep_average FLOAT,
|
25
|
+
oct_average FLOAT,
|
26
|
+
nov_average FLOAT,
|
27
|
+
dec_average FLOAT,
|
28
|
+
annual_average FLOAT,
|
29
|
+
units CHARACTER VARYING(255)
|
30
|
+
);
|
31
|
+
EOS
|
32
|
+
|
33
|
+
self.primary_key = 'row_hash'
|
34
|
+
|
35
|
+
warn_unless_size 90508
|
36
|
+
warn_if_any_nulls
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
begin
|
2
|
+
require 'geo_ruby'
|
3
|
+
rescue LoadError
|
4
|
+
puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'dbf'
|
9
|
+
rescue LoadError
|
10
|
+
puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
require 'unix_utils'
|
14
|
+
|
15
|
+
DirectNormalInsolation.class_eval do
|
16
|
+
data_miner do
|
17
|
+
import 'Direct Normal Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
|
18
|
+
:url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_DNI_High_Resolution.zip',
|
19
|
+
:format => :shp do
|
20
|
+
key :row_hash
|
21
|
+
store 'nw_lat', :field_name => 'upper_corner_y'
|
22
|
+
store 'nw_lon', :field_name => 'upper_corner_x'
|
23
|
+
store 'se_lat', :field_name => 'lower_corner_y'
|
24
|
+
store 'se_lon', :field_name => 'lower_corner_x'
|
25
|
+
store 'jan_average', :field_name => 'DNI01'
|
26
|
+
store 'feb_average', :field_name => 'DNI02'
|
27
|
+
store 'mar_average', :field_name => 'DNI03'
|
28
|
+
store 'apr_average', :field_name => 'DNI04'
|
29
|
+
store 'may_average', :field_name => 'DNI05'
|
30
|
+
store 'jun_average', :field_name => 'DNI06'
|
31
|
+
store 'jul_average', :field_name => 'DNI07'
|
32
|
+
store 'aug_average', :field_name => 'DNI08'
|
33
|
+
store 'sep_average', :field_name => 'DNI09'
|
34
|
+
store 'oct_average', :field_name => 'DNI10'
|
35
|
+
store 'nov_average', :field_name => 'DNI11'
|
36
|
+
store 'dec_average', :field_name => 'DNI12'
|
37
|
+
store 'annual_average', :field_name => 'DNIANN'
|
38
|
+
store 'units', :static => 'kilowatt_hours_per_square_metre_per_day'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -45,5 +45,13 @@ EOS
|
|
45
45
|
:loss_factor => 0.096 # from ecometrica paper FIXME TODO calculate this
|
46
46
|
|
47
47
|
warn_unless_size 213
|
48
|
-
|
48
|
+
warn_if_nulls_except(
|
49
|
+
:egrid_subregion_abbreviation,
|
50
|
+
:state_postal_abbreviation,
|
51
|
+
:country_iso_3166_code,
|
52
|
+
:co2_biogenic_emission_factor,
|
53
|
+
:co2_biogenic_emission_factor_units
|
54
|
+
)
|
55
|
+
warn_if_nulls /abbreviation/, :conditions => 'country_iso_3166_code IS NULL'
|
56
|
+
warn_if_nulls :country_iso_3166_code, :conditions => 'egrid_subregion_abbreviation IS NULL AND state_postal_abbreviation IS NULL'
|
49
57
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'earth/model'
|
2
|
+
require 'earth/insolation_scopes'
|
3
|
+
|
4
|
+
class GlobalHorizontalInsolation < ActiveRecord::Base
|
5
|
+
extend Earth::Model
|
6
|
+
include Earth::InsolationScopes
|
7
|
+
|
8
|
+
TABLE_STRUCTURE = <<-EOS
|
9
|
+
CREATE TABLE global_horizontal_insolations
|
10
|
+
(
|
11
|
+
row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
|
12
|
+
nw_lat FLOAT,
|
13
|
+
nw_lon FLOAT,
|
14
|
+
se_lat FLOAT,
|
15
|
+
se_lon FLOAT,
|
16
|
+
jan_average FLOAT,
|
17
|
+
feb_average FLOAT,
|
18
|
+
mar_average FLOAT,
|
19
|
+
apr_average FLOAT,
|
20
|
+
may_average FLOAT,
|
21
|
+
jun_average FLOAT,
|
22
|
+
jul_average FLOAT,
|
23
|
+
aug_average FLOAT,
|
24
|
+
sep_average FLOAT,
|
25
|
+
oct_average FLOAT,
|
26
|
+
nov_average FLOAT,
|
27
|
+
dec_average FLOAT,
|
28
|
+
annual_average FLOAT,
|
29
|
+
units CHARACTER VARYING(255)
|
30
|
+
);
|
31
|
+
EOS
|
32
|
+
|
33
|
+
self.primary_key = 'row_hash'
|
34
|
+
|
35
|
+
warn_unless_size 138970
|
36
|
+
warn_if_any_nulls
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
begin
|
2
|
+
require 'geo_ruby'
|
3
|
+
rescue LoadError
|
4
|
+
puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'dbf'
|
9
|
+
rescue LoadError
|
10
|
+
puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
require 'unix_utils'
|
14
|
+
|
15
|
+
GlobalHorizontalInsolation.class_eval do
|
16
|
+
data_miner do
|
17
|
+
import 'Global Horizontal Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
|
18
|
+
:url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_GHI_High_Resolution.zip',
|
19
|
+
:format => :shp do
|
20
|
+
key :row_hash
|
21
|
+
store 'nw_lat', :field_name => 'upper_corner_y'
|
22
|
+
store 'nw_lon', :field_name => 'upper_corner_x'
|
23
|
+
store 'se_lat', :field_name => 'lower_corner_y'
|
24
|
+
store 'se_lon', :field_name => 'lower_corner_x'
|
25
|
+
store 'jan_average', :field_name => 'GHI01'
|
26
|
+
store 'feb_average', :field_name => 'GHI02'
|
27
|
+
store 'mar_average', :field_name => 'GHI03'
|
28
|
+
store 'apr_average', :field_name => 'GHI04'
|
29
|
+
store 'may_average', :field_name => 'GHI05'
|
30
|
+
store 'jun_average', :field_name => 'GHI06'
|
31
|
+
store 'jul_average', :field_name => 'GHI07'
|
32
|
+
store 'aug_average', :field_name => 'GHI08'
|
33
|
+
store 'sep_average', :field_name => 'GHI09'
|
34
|
+
store 'oct_average', :field_name => 'GHI10'
|
35
|
+
store 'nov_average', :field_name => 'GHI11'
|
36
|
+
store 'dec_average', :field_name => 'GHI12'
|
37
|
+
store 'annual_average', :field_name => 'GHIANN'
|
38
|
+
store 'units', :static => 'kilowatt_hours_per_square_metre_per_day'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'earth/model'
|
2
|
+
require 'earth/insolation_scopes'
|
3
|
+
|
4
|
+
class PhotovoltaicInsolation < ActiveRecord::Base
|
5
|
+
extend Earth::Model
|
6
|
+
include Earth::InsolationScopes
|
7
|
+
|
8
|
+
TABLE_STRUCTURE = <<-EOS
|
9
|
+
CREATE TABLE photovoltaic_insolations
|
10
|
+
(
|
11
|
+
row_hash CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
|
12
|
+
nw_lat FLOAT,
|
13
|
+
nw_lon FLOAT,
|
14
|
+
se_lat FLOAT,
|
15
|
+
se_lon FLOAT,
|
16
|
+
jan_average FLOAT,
|
17
|
+
feb_average FLOAT,
|
18
|
+
mar_average FLOAT,
|
19
|
+
apr_average FLOAT,
|
20
|
+
may_average FLOAT,
|
21
|
+
jun_average FLOAT,
|
22
|
+
jul_average FLOAT,
|
23
|
+
aug_average FLOAT,
|
24
|
+
sep_average FLOAT,
|
25
|
+
oct_average FLOAT,
|
26
|
+
nov_average FLOAT,
|
27
|
+
dec_average FLOAT,
|
28
|
+
annual_average FLOAT,
|
29
|
+
units CHARACTER VARYING(255)
|
30
|
+
);
|
31
|
+
EOS
|
32
|
+
|
33
|
+
self.primary_key = 'row_hash'
|
34
|
+
|
35
|
+
warn_unless_size 90469
|
36
|
+
warn_if_any_nulls
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
begin
|
2
|
+
require 'geo_ruby'
|
3
|
+
rescue LoadError
|
4
|
+
puts '[Earth] You need to install the geo_ruby gem to mine Insolation from scratch'
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'dbf'
|
9
|
+
rescue LoadError
|
10
|
+
puts '[Earth] You need to install the dbf gem to mine Insolation from scratch'
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
require 'unix_utils'
|
14
|
+
|
15
|
+
PhotovoltaicInsolation.class_eval do
|
16
|
+
data_miner do
|
17
|
+
import 'Photovoltaic Insolation shapefile from NREL at http://www.nrel.gov/gis/data_solar.html',
|
18
|
+
:url => 'http://www.nrel.gov/gis/cfm/data/GIS_Data_Technology_Specific/United_States/Solar/High_Resolution/Lower_48_LATTILT_High_Resolution.zip',
|
19
|
+
:format => :shp do
|
20
|
+
key :row_hash
|
21
|
+
store 'nw_lat', :field_name => 'upper_corner_y'
|
22
|
+
store 'nw_lon', :field_name => 'upper_corner_x'
|
23
|
+
store 'se_lat', :field_name => 'lower_corner_y'
|
24
|
+
store 'se_lon', :field_name => 'lower_corner_x'
|
25
|
+
store 'jan_average', :field_name => 'JAN'
|
26
|
+
store 'feb_average', :field_name => 'FEB'
|
27
|
+
store 'mar_average', :field_name => 'MAR'
|
28
|
+
store 'apr_average', :field_name => 'APR'
|
29
|
+
store 'may_average', :field_name => 'MAY'
|
30
|
+
store 'jun_average', :field_name => 'JUN'
|
31
|
+
store 'jul_average', :field_name => 'JUL'
|
32
|
+
store 'aug_average', :field_name => 'AUG'
|
33
|
+
store 'sep_average', :field_name => 'SEP'
|
34
|
+
store 'oct_average', :field_name => 'OCT'
|
35
|
+
store 'nov_average', :field_name => 'NOV'
|
36
|
+
store 'dec_average', :field_name => 'DEC'
|
37
|
+
store 'annual_average', :field_name => 'ANNUAL'
|
38
|
+
store 'units', :static => 'kilowatt_hours_per_square_metre_per_day'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'earth/model'
|
2
2
|
require 'earth/loader'
|
3
|
-
Earth::Loader.load_plugins
|
4
3
|
|
5
4
|
require 'earth/locality/climate_division'
|
6
5
|
require 'earth/locality/country'
|
@@ -9,6 +8,8 @@ require 'earth/locality/state'
|
|
9
8
|
require 'earth/electricity/electric_market'
|
10
9
|
require 'earth/electricity/electric_utility'
|
11
10
|
|
11
|
+
require 'geocoder'
|
12
|
+
|
12
13
|
class ZipCode < ActiveRecord::Base
|
13
14
|
data_miner do
|
14
15
|
process "Ensure Country is imported because it's like a belongs_to association" do
|
@@ -17,6 +18,7 @@ class ZipCode < ActiveRecord::Base
|
|
17
18
|
end
|
18
19
|
|
19
20
|
extend Earth::Model
|
21
|
+
extend Geocoder::Model::ActiveRecord
|
20
22
|
|
21
23
|
TABLE_STRUCTURE = <<-EOS
|
22
24
|
|
@@ -25,8 +27,8 @@ CREATE TABLE zip_codes
|
|
25
27
|
name CHARACTER VARYING(255) NOT NULL PRIMARY KEY,
|
26
28
|
state_postal_abbreviation CHARACTER VARYING(255),
|
27
29
|
description CHARACTER VARYING(255),
|
28
|
-
latitude
|
29
|
-
longitude
|
30
|
+
latitude FLOAT,
|
31
|
+
longitude FLOAT,
|
30
32
|
egrid_subregion_abbreviation CHARACTER VARYING(255),
|
31
33
|
climate_division_name CHARACTER VARYING(255),
|
32
34
|
population INTEGER
|
@@ -43,21 +45,13 @@ EOS
|
|
43
45
|
has_many :electric_utilities, :through => :electric_markets
|
44
46
|
|
45
47
|
scope :known_subregion, where('egrid_subregion_abbreviation IS NOT NULL')
|
46
|
-
|
48
|
+
|
49
|
+
reverse_geocoded_by :latitude, :longitude
|
50
|
+
|
47
51
|
def country
|
48
52
|
Country.united_states
|
49
53
|
end
|
50
|
-
|
51
|
-
# Used by LodgingProperty custom find to find properties near to a zip code
|
52
|
-
def latitude_longitude
|
53
|
-
[latitude, longitude]
|
54
|
-
end
|
55
|
-
|
56
|
-
# Used by LodgingProperty custom find to find properties near to a zip code
|
57
|
-
acts_as_mappable :default_units => :kilometres,
|
58
|
-
:lat_column_name => :latitude,
|
59
|
-
:lng_column_name => :longitude
|
60
|
-
|
54
|
+
|
61
55
|
warn_unless_size 43770
|
62
56
|
warn_if_nonexistent_owner_except :egrid_subregion
|
63
57
|
end
|