koeppen_geiger 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
File without changes
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2011 Tobias Weiß
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
data/Manifest ADDED
@@ -0,0 +1,21 @@
1
+ CHANGELOG
2
+ LICENSE
3
+ Manifest
4
+ README.rdoc
5
+ Rakefile
6
+ VERSION
7
+ data/koeppen-geiger.zip
8
+ generators/koeppen_geiger_generator.rb
9
+ generators/templates/migration.rb
10
+ lib/koeppen_geiger.rb
11
+ lib/koeppen_geiger/climate_classification.rb
12
+ lib/koeppen_geiger/has_climate_classification.rb
13
+ lib/koeppen_geiger/pg_climate_classification.rb
14
+ lib/koeppen_geiger/utils.rb
15
+ lib/locales/de.yml
16
+ lib/locales/en.yml
17
+ lib/tasks/koeppen_geiger.rake
18
+ test/test_helper.rb
19
+ test/unit/climate_classification_test.rb
20
+ test/unit/pg_climate_classification_test.rb
21
+ test/unit/utils_test.rb
data/README.rdoc ADDED
@@ -0,0 +1,52 @@
1
+ = KoeppenGeiger
2
+
3
+ This gem adds a climate classification parameter to a location object based upon observed or predicted climate data
4
+
5
+ == Installation
6
+
7
+ gem install koeppen_geiger
8
+
9
+ To install the gem, add this to your config/environment.rb:
10
+ config.gem 'koeppen_geiger'
11
+
12
+ == Post Installation
13
+
14
+ script/generate koeppen_geiger
15
+ rake koeppen_geiger:configure
16
+ sudo rake koeppen_geiger:extract_gis_data
17
+ rake koeppen_geiger:import_gis_data
18
+ rake db:migrate
19
+
20
+ == Requirements
21
+
22
+ Rails 2.3.x
23
+
24
+ Install PostgreSQL
25
+ http://www.postgresql.org
26
+
27
+ Install Postgis
28
+ http://www.postgis.org
29
+
30
+ Create a spatially-enabled database
31
+ http://www.postgis.org/documentation/manual-1.5/ch02.html#id2630392
32
+
33
+ == Usage
34
+
35
+ class Location < ActiveRecord::Base
36
+ has_climate_classification
37
+ has_climate_classification :lat_column_name => "latitude", :lng_column_name => "longitude"
38
+ end
39
+
40
+ location = Location.find(1)
41
+ location.classify
42
+
43
+ location.classified(:observed,1901,1925)
44
+ => "Am"
45
+
46
+ location.classified(:observed,1901,1925).to_words
47
+ => "Equatorial monsoon"
48
+
49
+ == Data
50
+
51
+ The underlying data has been taken from:
52
+ http://koeppen-geiger.vu-wien.ac.at/shifts.htm
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('koeppen_geiger', '0.0.1') do |p|
6
+ p.summary = "A Climate Classification Gem for ActiveRecord"
7
+ p.description = "A gem that adds a climate classification parameter based upon the Koeppen-Geiger climate classification system to a point location"
8
+ p.url = "http://github.com/tpunkt/koeppen_geiger"
9
+ p.author = "Tobias Weiss"
10
+ p.email = "tobias.weiss@gmail.com"
11
+ p.ignore_pattern = ["tmp/*", "script/*"]
12
+ p.development_dependencies = []
13
+ end
14
+
15
+ # Load rake files used with this gem
16
+ # Dir["#{File.dirname(__FILE__)}/lib/tasks/*.rake"].sort.each { |ext| load ext }
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
Binary file
@@ -0,0 +1,16 @@
1
+ class KoeppenGeigerGenerator < Rails::Generator::Base
2
+
3
+ def manifest
4
+ record do |m|
5
+ # Create a directory if missing
6
+ m.directory 'lib/tasks'
7
+
8
+ # Copy rake files to Rails application
9
+ m.file('../../lib/tasks/koeppen_geiger.rake', 'lib/tasks/koeppen_geiger.rake')
10
+
11
+ # Copy migration file to Rails application
12
+ m.migration_template('migration.rb', 'db/migrate', :migration_file_name => "create_climate_classifications.rb")
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,34 @@
1
+ class CreateClimateClassifications < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :climate_classifications, :force => true do |t|
5
+ t.integer :classified_id
6
+ t.string :observed_1901_1925
7
+ t.string :observed_1926_1950
8
+ t.string :observed_1951_1975
9
+ t.string :observed_1976_2000
10
+ t.string :a1f1_2001_2025
11
+ t.string :a1f1_2026_2050
12
+ t.string :a1f1_2051_2075
13
+ t.string :a1f1_2076_2100
14
+ t.string :a2_2001_2025
15
+ t.string :a2_2026_2050
16
+ t.string :a2_2051_2075
17
+ t.string :a2_2076_2100
18
+ t.string :b1_2001_2025
19
+ t.string :b1_2026_2050
20
+ t.string :b1_2051_2075
21
+ t.string :b1_2076_2100
22
+ t.string :b2_2001_2025
23
+ t.string :b2_2026_2050
24
+ t.string :b2_2051_2075
25
+ t.string :b2_2076_2100
26
+ t.timestamps
27
+ end
28
+ end
29
+
30
+ def self.down
31
+ drop_table :climate_classifications
32
+ end
33
+
34
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{koeppen_geiger}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Tobias Weiss"]
9
+ s.date = %q{2011-03-23}
10
+ s.description = %q{A gem that adds a climate classification parameter based upon the Koeppen-Geiger climate classification system to a point location}
11
+ s.email = %q{tobias.weiss@gmail.com}
12
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "lib/koeppen_geiger.rb", "lib/koeppen_geiger/climate_classification.rb", "lib/koeppen_geiger/has_climate_classification.rb", "lib/koeppen_geiger/pg_climate_classification.rb", "lib/koeppen_geiger/utils.rb", "lib/locales/de.yml", "lib/locales/en.yml", "lib/tasks/koeppen_geiger.rake"]
13
+ s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "VERSION", "data/koeppen-geiger.zip", "generators/koeppen_geiger_generator.rb", "generators/templates/migration.rb", "lib/koeppen_geiger.rb", "lib/koeppen_geiger/climate_classification.rb", "lib/koeppen_geiger/has_climate_classification.rb", "lib/koeppen_geiger/pg_climate_classification.rb", "lib/koeppen_geiger/utils.rb", "lib/locales/de.yml", "lib/locales/en.yml", "lib/tasks/koeppen_geiger.rake", "test/test_helper.rb", "test/unit/climate_classification_test.rb", "test/unit/pg_climate_classification_test.rb", "test/unit/utils_test.rb", "koeppen_geiger.gemspec"]
14
+ s.homepage = %q{http://github.com/tpunkt/koeppen_geiger}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Koeppen_geiger", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{koeppen_geiger}
18
+ s.rubygems_version = %q{1.6.2}
19
+ s.summary = %q{A Climate Classification Gem for ActiveRecord}
20
+ s.test_files = ["test/test_helper.rb", "test/unit/climate_classification_test.rb", "test/unit/pg_climate_classification_test.rb", "test/unit/utils_test.rb"]
21
+ s.signing_key = '/Users/tweiss/Documents/#private_keys/gem-private_key.pem'
22
+ s.cert_chain = ['gem-public_cert.pem']
23
+
24
+ if s.respond_to? :specification_version then
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
+ else
29
+ end
30
+ else
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module KoeppenGeiger
2
+
3
+ # 1. Has a table in the RDBMS of the Rails App
4
+ # 2. Copy migration from lib/migrate/template.rb to RAILS_ROOT/db/migrate
5
+ # 3. Create table via rake db:migrate
6
+ # 5. Defines a method thats grabs climate classifications from PostgreSQL and store it in RDBMS after creation
7
+ # 6. Defines methods to get climate classification for a "scenario" and "time period"
8
+
9
+ class ClimateClassification < ActiveRecord::Base
10
+
11
+ CLIMATE_ZONES = {"11" => "Af","12" => "Am","13" => "As","14" => "Aw",
12
+ "21" => "BWk","22" => "BWh","26" => "BSk","27" => "BSh",
13
+ "31" => "Cfa","32" => "Cfb","33" => "Cfc","34" => "Csa",
14
+ "35" => "Csb","36" => "Csc","37" => "Cwa","38" => "Cwb",
15
+ "39" => "Cwc","41" => "Dfa","42" => "Dfb","43" => "Dfc",
16
+ "44" => "Dfd","45" => "Dsa","46" => "Dsb","47" => "Dsc",
17
+ "48" => "Dsd","49" => "Dwa","50" => "Dwb","51" => "Dwc",
18
+ "52" => "Dwd","61" => "EF","62" => "ET" }
19
+
20
+ def self.create_column_name(*args)
21
+ args.join("_")
22
+ end
23
+
24
+ def self.climate_zone_to_words(str)
25
+ I18n.t(str.downcase.to_sym, :scope => [:climate_zones])
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,67 @@
1
+ module KoeppenGeiger
2
+
3
+ # Can be mixed into any ActiveRecord class that has lat/lng columns
4
+ #
5
+ # Example:
6
+ # class Location < ActiveRecord::Base
7
+ # has_climate_classification
8
+ # has_climate_classification :lat_column_name => "latitude", :lng_column_name => "longitude"
9
+ # end
10
+ #
11
+ # location = Location.find(1)
12
+ # location.climate_classification("observed",1901,1925)
13
+ # => "Cfa"
14
+ # location.climate_classification("observed",1901,1925).to_words
15
+ # => "Equatorial climate, fully humid, hot summer"
16
+ #
17
+ # Declares a 1:1 association to the model when embedding has_climate_classification
18
+
19
+ module HasClimateClassification
20
+
21
+ def has_climate_classification(options = {})
22
+
23
+ @@options = options
24
+
25
+ class_eval do
26
+ has_one :climate_classification, :class_name => "KoeppenGeiger::ClimateClassification", :foreign_key => "classified_id"
27
+
28
+ def classify
29
+ unless @@options[:lat_column_name].nil? || @@options[:lng_column_name].nil?
30
+ self[:lat] = self[@@options[:lat_column_name].to_sym] || self[:lat]
31
+ self[:lng] = self[@@options[:lng_column_name].to_sym] || self[:lng]
32
+ end
33
+
34
+ if self.has_coordinates?
35
+ self.climate_classification = KoeppenGeiger::ClimateClassification.new if self.climate_classification.nil?
36
+ pg_cc = KoeppenGeiger::PgClimateClassification.new
37
+ self.climate_classification.attributes = pg_cc.get_climate_zones(self[:lat],self[:lng])
38
+ self.climate_classification.save
39
+ else
40
+ "Object cannot be classified. Please specify correct column names and make sure your location has correct coordinates."
41
+ end
42
+ end
43
+
44
+ def classified(scenario,from,to)
45
+ self.climate_classification[KoeppenGeiger::ClimateClassification.create_column_name(scenario,from,to).to_sym] || "Scenario and/or time period not found"
46
+ end
47
+
48
+ def has_coordinates?
49
+ !self[:lat].nil? && self[:lat].present? && !self[:lng].nil? && self[:lng].present?
50
+ end
51
+
52
+ end
53
+
54
+ # Extend String class
55
+ String.class_eval do
56
+
57
+ def to_words
58
+ KoeppenGeiger::ClimateClassification.climate_zone_to_words(self)
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,61 @@
1
+ module KoeppenGeiger
2
+
3
+ # This is a tableless model that establishes a connection to PostgreSQL and requests
4
+ # observed or predicted climate_classifications for a pair of lat/lng coordinates
5
+ #
6
+ # See this snippet for more information
7
+ # http://snipplr.com/view/1849/tableless-model/
8
+
9
+ class PgClimateClassification < ActiveRecord::Base
10
+ establish_connection "koeppen_geiger"
11
+
12
+ def self.columns
13
+ @columns ||= []
14
+ end
15
+
16
+ attr_accessor :scenarios
17
+
18
+ ##########################
19
+ # Instance methods
20
+ ##########################
21
+
22
+ def initialize
23
+ get_scenario_tables
24
+ end
25
+
26
+ #
27
+ # Get all tables from database to see how many different scenarios and timeperiods
28
+ # have been imported
29
+ #
30
+ # Each shapefile imported into the database should create a new table
31
+ #
32
+ def get_scenario_tables
33
+ res = self.connection.execute( "SELECT table_name FROM information_schema.tables
34
+ WHERE table_schema = 'public'
35
+ AND table_name != 'geometry_columns'
36
+ AND table_name != 'spatial_ref_sys'")
37
+ @scenarios = []
38
+ if res.num_tuples >= 1
39
+ res.each do |tuple|
40
+ @scenarios << tuple["table_name"]
41
+ end
42
+ else
43
+ puts "No data imported yet. Please run rake koeppen_geiger:db:import_data"
44
+ end
45
+ end
46
+
47
+ def get_climate_zones(lat,lon)
48
+ gridcodes = {}
49
+ @scenarios.each do |scenario|
50
+ res = self.connection.execute("SELECT gridcode FROM #{scenario} WHERE ST_CONTAINS(the_geom,'POINT(#{lon} #{lat})') LIMIT 1;")
51
+ if res.num_tuples == 1
52
+ gridcodes[scenario] = KoeppenGeiger::ClimateClassification::CLIMATE_ZONES[res.getvalue(0,0).to_s]
53
+ end
54
+ end
55
+
56
+ return gridcodes
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,125 @@
1
+ module KoeppenGeiger
2
+
3
+ require 'find'
4
+ require 'zip/zip'
5
+ require 'fileutils'
6
+
7
+ # Steps
8
+ #
9
+ # 1. Add default configuration for koeppen_geiger to database.yml
10
+ #
11
+ # 2. Copy migration to create climate classifications table
12
+ #
13
+ # 3. run rake db:migrate [RAILS_ENV]
14
+ #
15
+ # 4. Create a spatially-enabled database in PostgreSQL
16
+ # http://postgis.org/documentation/manual-1.5/ch02.html#id2630392
17
+ #
18
+ # 5. Load GIS data via shp2pgsql into PostgreSQL database
19
+ # http://postgis.org/documentation/manual-1.5/ch04.html#shp2pgsql_usage
20
+
21
+ class Utils
22
+
23
+ @@rails_root = defined?(RAILS_ROOT) ? RAILS_ROOT : ""
24
+
25
+ DEFAULT_CONFIG = {"koeppen_geiger" => {
26
+ "adapter" => "postgresql",
27
+ "database" => "koeppen_geiger",
28
+ "username" => 'PLEASE CHANGE ME',
29
+ "password" => 'PLEASE CHANGE ME',
30
+ "host" => "localhost",
31
+ "encoding" => "UTF8",
32
+ "port" => 5432
33
+ }
34
+ }
35
+
36
+ # Location of database configuration
37
+ DB_CONFIG = "#{@@rails_root}/config/database.yml"
38
+
39
+ # GIS data
40
+ ARCHIVE = File.dirname(__FILE__) + "/../../data/koeppen-geiger.zip"
41
+ EXTRACT_DIR = File.dirname(__FILE__) + "/../../data"
42
+ GIS_DATA_DIR = EXTRACT_DIR + "/koeppen-geiger"
43
+
44
+ class << self
45
+
46
+ # Open database.yml and add config lines
47
+ def configure_db
48
+ yaml = Utils.get_db_config
49
+ yaml = Hash.new unless yaml
50
+
51
+ unless yaml.has_key?("koeppen_geiger")
52
+ yaml.update(KoeppenGeiger::Utils::DEFAULT_CONFIG)
53
+ File.open(KoeppenGeiger::Utils::DB_CONFIG, 'w') do |out|
54
+ YAML::dump(yaml,out)
55
+ end
56
+ puts ">> Updated database.yml. Please enter correct username/password combination."
57
+ else
58
+ puts ">> Your database.yml has already been updated"
59
+ end
60
+ end
61
+
62
+ def get_db_config
63
+ begin
64
+ YAML::load_file(KoeppenGeiger::Utils::DB_CONFIG)
65
+ rescue IOError
66
+ puts "Could not find database configuration file"
67
+ end
68
+ end
69
+
70
+ ########
71
+
72
+ # Import data
73
+ def import_gis_data
74
+ yaml = Utils.get_db_config
75
+ database = yaml["koeppen_geiger"]["database"]
76
+ username = yaml["koeppen_geiger"]["username"]
77
+ password = yaml["koeppen_geiger"]["password"]
78
+
79
+ get_shape_files.each {|key,value|
80
+ Thread.new do
81
+ Kernel.system("shp2pgsql #{value} public.#{key} | psql -d #{database} -U #{username}")
82
+ end
83
+ }
84
+ end
85
+
86
+ # Run through subdirectories of data dir
87
+ # and add shape files and dirname to hash
88
+ def get_shape_files
89
+ filehash = {}
90
+
91
+ Find.find(KoeppenGeiger::Utils::GIS_DATA_DIR) do |path|
92
+ if (File.extname(path).eql?(".shp"))
93
+ dirname = File.dirname(path).split("/")[-1]
94
+ filehash[dirname] = File.expand_path(path)
95
+ end
96
+ end
97
+
98
+ filehash
99
+ end
100
+
101
+ def extract_gis_data
102
+ if File.exists?(KoeppenGeiger::Utils::ARCHIVE)
103
+ begin
104
+ #Open the existing zip file
105
+ Zip::ZipFile::open(KoeppenGeiger::Utils::ARCHIVE) do |zipfile|
106
+ zipfile.each do |f|
107
+ #start extracting each file
108
+ path = File.join(KoeppenGeiger::Utils::EXTRACT_DIR, f.name)
109
+ FileUtils.mkdir_p(File.dirname(path))
110
+ zipfile.extract(f, path)
111
+ end
112
+ end
113
+ rescue Exception => e
114
+ #If the script blows up, then we should probably be somewhere in this region
115
+ puts "An error occurred during decompression: \n #{e}."
116
+ end
117
+ else
118
+ puts "\n\nArchive could not be found."
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ end
125
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require 'active_support'
4
+ require 'i18n'
5
+
6
+ I18n.load_path += Dir.glob(File.dirname(__FILE__) + "/locales/*.{rb,yml}")
7
+
8
+ require 'yaml'
9
+ require 'fileutils'
10
+ require 'koeppen_geiger/climate_classification'
11
+ require 'koeppen_geiger/has_climate_classification'
12
+ require 'koeppen_geiger/pg_climate_classification'
13
+ require 'koeppen_geiger/utils'
14
+
15
+ if defined?(ActiveRecord::Base)
16
+ ActiveRecord::Base.extend KoeppenGeiger::HasClimateClassification
17
+ end
@@ -0,0 +1,33 @@
1
+ de:
2
+ climate_zones:
3
+ af: "Equatorial rainforest, fully humid"
4
+ am: "Equatorial monsoon"
5
+ as: "Equatorial savannah with dry summer"
6
+ aw: "Equatorial savannah with dry winter"
7
+ bsk: "Cold steppe climate"
8
+ bsh: "Hot steppe climate"
9
+ bwk: "Cold desert climate"
10
+ bwh: "Hot desert climate"
11
+ csa: "Warm temperature climate, hot and dry summer"
12
+ csb: "Warm temperature climate, warm and dry summer"
13
+ csc: "Warm temperature climate, cool and dry summer, cold summer"
14
+ cfa: "Warm temperature climate, fully humid, hot and dry summer"
15
+ cfb: "Warm temperature climate, fully humid, warm and dry summer"
16
+ cfc: "Warm temperature climate, fully humid, cool and dry summer, cold summer"
17
+ cwa: "Warm temperature climate, hot summer, dry winter"
18
+ cwb: "Warm temperature climate, warm summer, dry winter"
19
+ cwc: "Warm temperature climate, cool summer, cold and dry winter"
20
+ dsa: "Snow climate, hot and dry summer"
21
+ dsb: "Snow climate, warm and dry summer"
22
+ dsc: "Snow climate, cool and dry summer, cold winter"
23
+ dsd: "Snow climate, dry summer, extremely continental"
24
+ dwa: "Snow climate, hot summer, dry winter"
25
+ dwb: "Snow climate, warm summer, dry winter"
26
+ dwc: "Snow climate, cool summer, cold and dry winter"
27
+ dwd: "Snow climate, dry winter, extremely continental"
28
+ dfa: "Snow climate, hot summer, fully humid"
29
+ dfb: "Snow climate, warm summer, fully humid"
30
+ dfc: "Snow climate, cool summer, cold winter, fully humid"
31
+ dfd: "Snow climate, extremely continental, fully humid"
32
+ et: "Tundra climate"
33
+ ef: "Frost climate"
@@ -0,0 +1,33 @@
1
+ en:
2
+ climate_zones:
3
+ af: "Equatorial rainforest, fully humid"
4
+ am: "Equatorial monsoon"
5
+ as: "Equatorial savannah with dry summer"
6
+ aw: "Equatorial savannah with dry winter"
7
+ bsk: "Cold steppe climate"
8
+ bsh: "Hot steppe climate"
9
+ bwk: "Cold desert climate"
10
+ bwh: "Hot desert climate"
11
+ csa: "Warm temperature climate, hot and dry summer"
12
+ csb: "Warm temperature climate, warm and dry summer"
13
+ csc: "Warm temperature climate, cool and dry summer, cold summer"
14
+ cfa: "Warm temperature climate, fully humid, hot and dry summer"
15
+ cfb: "Warm temperature climate, fully humid, warm and dry summer"
16
+ cfc: "Warm temperature climate, fully humid, cool and dry summer, cold summer"
17
+ cwa: "Warm temperature climate, hot summer, dry winter"
18
+ cwb: "Warm temperature climate, warm summer, dry winter"
19
+ cwc: "Warm temperature climate, cool summer, cold and dry winter"
20
+ dsa: "Snow climate, hot and dry summer"
21
+ dsb: "Snow climate, warm and dry summer"
22
+ dsc: "Snow climate, cool and dry summer, cold winter"
23
+ dsd: "Snow climate, dry summer, extremely continental"
24
+ dwa: "Snow climate, hot summer, dry winter"
25
+ dwb: "Snow climate, warm summer, dry winter"
26
+ dwc: "Snow climate, cool summer, cold and dry winter"
27
+ dwd: "Snow climate, dry winter, extremely continental"
28
+ dfa: "Snow climate, hot summer, fully humid"
29
+ dfb: "Snow climate, warm summer, fully humid"
30
+ dfc: "Snow climate, cool summer, cold winter, fully humid"
31
+ dfd: "Snow climate, extremely continental, fully humid"
32
+ et: "Tundra climate"
33
+ ef: "Frost climate"
@@ -0,0 +1,16 @@
1
+ namespace :koeppen_geiger do
2
+ desc "Add new database settings to database.yml"
3
+ task :configure => :environment do
4
+ KoeppenGeiger::Utils.configure_db
5
+ end
6
+
7
+ desc "Import gis data into table"
8
+ task :import_gis_data => :environment do
9
+ KoeppenGeiger::Utils.import_gis_data
10
+ end
11
+
12
+ desc "Extract gis data"
13
+ task :extract_gis_data => :environment do
14
+ KoeppenGeiger::Utils.extract_gis_data
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'yaml'
3
+ require 'active_record'
4
+ require 'shoulda'
5
+ require 'lib/koeppen_geiger'
@@ -0,0 +1,5 @@
1
+ require 'test/test_helper'
2
+
3
+ class ClimateClassificationTest < Test::Unit::TestCase
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/test_helper'
2
+
3
+ class PgClimateClassificationTest < Test::Unit::TestCase
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/test_helper'
2
+
3
+ class UtilsTest < Test::Unit::TestCase
4
+
5
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ Qc���:�9k��ܰ��RQ��s�W
2
+ O$��ծ �gG������ˎBr�|!�8��ŭ�d�f�5��b[)��8���,l���풛bDNJ�_�ͧ�s��-�$ %
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: koeppen_geiger
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Tobias Weiss
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain:
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDOjCCAiKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBDMRUwEwYDVQQDDAx0b2Jp
20
+ YXMud2Vpc3MxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
21
+ A2NvbTAeFw0xMTAzMjMxMzQ1NDZaFw0xMjAzMjIxMzQ1NDZaMEMxFTATBgNVBAMM
22
+ DHRvYmlhcy53ZWlzczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
23
+ LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5YA7OBO
24
+ /oeOJIdLoGig5D/O2o9vaqizuVisG0W0Br88A5zLCoSC1KAZ6Wdtl3NqqN4CBJ2J
25
+ zeA82X1b25FjkxHMFBTGhcqBz9ubInX37myHsTq+BzejLakkYlxnpSyAvtYCYJBv
26
+ nk897vzgNugJUSpQK7p0NfsDA9Utku7ZyuOZ/sQJhZju2GhkNN4h5xMLYiaVdSPu
27
+ gRPv3d7U/T8ynK01TihhmSMPVjJJXBwxTkgm2pnN4Vt27OgI3qYSNa1LWSMMkste
28
+ VFKv0vbZmMT1P4WHAGLyIueyMPISwG0RBV2ki3zLd2PkO/8HVKb4MEuZ6ow6GTqf
29
+ aIgGM+zMvQtpfQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
30
+ HQ4EFgQUglZplVwHjFDAGwgV1sNwgZvE1sAwDQYJKoZIhvcNAQEFBQADggEBAH/X
31
+ p6YgH9u+hI5Y6GP4apDwp6/5mTDrHi32URkK4DR+EYev9+7B5UhJirkRr+HwJkZq
32
+ s2t7bbeCP2Da6Q2fLIzHyapMSpxHXVsiEADDSOZu7a7IwWNie76+8A0bJLoglrI6
33
+ X5Z0+aLxpj9qLKvhseewhJ8ckUVWViLdIkw56Xco5BSPxI6SEtA9OkEY7hw/Tp7B
34
+ jzmvl/O54R4hAX2l/2+6TnBNKqk30Rcv4x6bHooTjF0/vs4qvuo9UwVxa+ZQ/xu1
35
+ RReLEXx35Rm+lRHb5X6nUkC80H2Y3FUBiykkPyJdURmVas5wQ0EwW1l/KEyXDoNY
36
+ ZHSsbf0Us43IP9I3KVo=
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2011-03-23 00:00:00 +01:00
40
+ default_executable:
41
+ dependencies: []
42
+
43
+ description: A gem that adds a climate classification parameter based upon the Koeppen-Geiger climate classification system to a point location
44
+ email: tobias.weiss@gmail.com
45
+ executables: []
46
+
47
+ extensions: []
48
+
49
+ extra_rdoc_files:
50
+ - CHANGELOG
51
+ - LICENSE
52
+ - README.rdoc
53
+ - lib/koeppen_geiger.rb
54
+ - lib/koeppen_geiger/climate_classification.rb
55
+ - lib/koeppen_geiger/has_climate_classification.rb
56
+ - lib/koeppen_geiger/pg_climate_classification.rb
57
+ - lib/koeppen_geiger/utils.rb
58
+ - lib/locales/de.yml
59
+ - lib/locales/en.yml
60
+ - lib/tasks/koeppen_geiger.rake
61
+ files:
62
+ - CHANGELOG
63
+ - LICENSE
64
+ - Manifest
65
+ - README.rdoc
66
+ - Rakefile
67
+ - VERSION
68
+ - data/koeppen-geiger.zip
69
+ - generators/koeppen_geiger_generator.rb
70
+ - generators/templates/migration.rb
71
+ - lib/koeppen_geiger.rb
72
+ - lib/koeppen_geiger/climate_classification.rb
73
+ - lib/koeppen_geiger/has_climate_classification.rb
74
+ - lib/koeppen_geiger/pg_climate_classification.rb
75
+ - lib/koeppen_geiger/utils.rb
76
+ - lib/locales/de.yml
77
+ - lib/locales/en.yml
78
+ - lib/tasks/koeppen_geiger.rake
79
+ - test/test_helper.rb
80
+ - test/unit/climate_classification_test.rb
81
+ - test/unit/pg_climate_classification_test.rb
82
+ - test/unit/utils_test.rb
83
+ - koeppen_geiger.gemspec
84
+ has_rdoc: true
85
+ homepage: http://github.com/tpunkt/koeppen_geiger
86
+ licenses: []
87
+
88
+ post_install_message:
89
+ rdoc_options:
90
+ - --line-numbers
91
+ - --inline-source
92
+ - --title
93
+ - Koeppen_geiger
94
+ - --main
95
+ - README.rdoc
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 11
113
+ segments:
114
+ - 1
115
+ - 2
116
+ version: "1.2"
117
+ requirements: []
118
+
119
+ rubyforge_project: koeppen_geiger
120
+ rubygems_version: 1.6.2
121
+ signing_key:
122
+ specification_version: 3
123
+ summary: A Climate Classification Gem for ActiveRecord
124
+ test_files:
125
+ - test/test_helper.rb
126
+ - test/unit/climate_classification_test.rb
127
+ - test/unit/pg_climate_classification_test.rb
128
+ - test/unit/utils_test.rb
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ s��n