koeppen_geiger 0.0.1

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/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