koeppen_geiger 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +0 -0
- data/LICENSE +18 -0
- data/Manifest +21 -0
- data/README.rdoc +52 -0
- data/Rakefile +16 -0
- data/VERSION +1 -0
- data/data/koeppen-geiger.zip +0 -0
- data/generators/koeppen_geiger_generator.rb +16 -0
- data/generators/templates/migration.rb +34 -0
- data/koeppen_geiger.gemspec +32 -0
- data/lib/koeppen_geiger/climate_classification.rb +30 -0
- data/lib/koeppen_geiger/has_climate_classification.rb +67 -0
- data/lib/koeppen_geiger/pg_climate_classification.rb +61 -0
- data/lib/koeppen_geiger/utils.rb +125 -0
- data/lib/koeppen_geiger.rb +17 -0
- data/lib/locales/de.yml +33 -0
- data/lib/locales/en.yml +33 -0
- data/lib/tasks/koeppen_geiger.rake +16 -0
- data/test/test_helper.rb +5 -0
- data/test/unit/climate_classification_test.rb +5 -0
- data/test/unit/pg_climate_classification_test.rb +5 -0
- data/test/unit/utils_test.rb +5 -0
- data.tar.gz.sig +2 -0
- metadata +128 -0
- metadata.gz.sig +1 -0
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
|
data/lib/locales/de.yml
ADDED
@@ -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"
|
data/lib/locales/en.yml
ADDED
@@ -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
|
data/test/test_helper.rb
ADDED
data.tar.gz.sig
ADDED
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
|