agwx_grids 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new do |t|
7
7
  end
8
8
 
9
9
  desc "Run tests"
10
- task default: :test
10
+ task :default => :test
@@ -65,7 +65,7 @@ module AgwxGrids
65
65
 
66
66
  def calcYIncr
67
67
  if @yStart != nil && @yEnd != nil && @yDim != nil then
68
- @yIncr = (@yEnd - @yStart) / @yDim
68
+ @yIncr = (@yEnd - @yStart) / (@yDim - 1)
69
69
  end
70
70
  end
71
71
 
@@ -159,25 +159,34 @@ module AgwxGrids
159
159
  end
160
160
  end
161
161
 
162
+ # Find the nearest index to the given coord (params in real space, return is a zero-based index)
163
+ def nearest(coord,start,incr)
164
+ # convert coord to a lower-bound index (i.e. truncating integer conversion)
165
+ trunc = ((coord - start)/incr).to_i
166
+ # Does "trunc" the index of the closest real-space coord, or the next one up?
167
+ coord - (start + incr*trunc) > incr / 2.0 ? trunc + 1 : trunc
168
+ end
169
+
170
+ # Convert coordinates in real XY space to indices. Note that Z is sort-of a real-space coord, but
171
+ # represents a quantized there-or-not value like a DOY, not a scalar.
162
172
  def realToIndex(x,y,z)
163
- @myX = ((x-@mD.xStart)/@mD.xIncr).to_i
164
- @myY = ((y-@mD.yStart)/@mD.yIncr).to_i
165
- @myZ = z # ((z-@mD.zStart)/@mD.zIncr).to_i
166
- # puts "realToIndex: x #{x}, xStart #{@mD.xStart}, xIncr #{@mD.xIncr} myX #{@myX}; y #{y}, myY #{@myY} z #{z}, myZ #{@myZ}"
167
- [@myX,@myY,@myZ]
173
+ @my_ii = nearest(x,@mD.xStart,@mD.xIncr)
174
+ @my_jj = nearest(y,@mD.yStart,@mD.yIncr)
175
+ @my_doy = z
176
+ # puts "realToIndex: x #{x}, xStart #{@mD.xStart}, xIncr #{@mD.xIncr} myX #{@my_ii}; y #{y}, myY #{@my_jj} z #{z}, myZ #{@my_doy}"
177
+ [@my_ii,@my_jj,@my_doy]
168
178
  end
169
179
 
170
180
  def get(x,y,z)
171
181
  # puts "get #{x},#{y},#{z}"
172
182
  # puts "xStart=#{@mD.xStart}, yStart=#{@mD.yStart}, zStart=#{@mD.zStart}"
173
- # note that this just truncates; it should round to center of cell!
174
183
  realToIndex(x,y,z)
175
- # puts "@myX=#{@myX}, @myY=#{@myY}, @myZ=#{@myZ}"
176
- # puts "#{@layers[@myZ]}"
177
- if @layers[@myZ] == nil
184
+ # puts "@my_ii=#{@my_ii}, @my_jj=#{@my_jj}, @my_doy=#{@my_doy}"
185
+ # puts "#{@layers[@my_doy]}"
186
+ if @layers[@my_doy] == nil
178
187
  nil
179
188
  else
180
- val = @layers[@myZ].get(@myX,@myY)
189
+ val = @layers[@my_doy].get(@my_ii,@my_jj)
181
190
  val == mD.badVal ? nil : val
182
191
  end
183
192
  end
@@ -201,7 +210,7 @@ module AgwxGrids
201
210
  if layer == nil
202
211
  yield nil
203
212
  else
204
- val = layer.get(@myX,@myY)
213
+ val = layer.get(@my_ii,@my_jj)
205
214
  val = nil if val == mD.badVal
206
215
  yield val
207
216
  end
@@ -1,3 +1,3 @@
1
1
  module AgwxGrids
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/test/grid_test.rb CHANGED
@@ -49,6 +49,13 @@ class TestAgwxGrid < Test::Unit::TestCase
49
49
  assert_in_delta(long_start + 3 * long_incr, @grid.longitude_for(3), 2 ** -20)
50
50
  end
51
51
 
52
+ def test_by_long_lat
53
+ assert_equal(-17.03, @grid.get(-96.86,42.0,1))
54
+ assert_equal(-17.01, @grid.get(-96.45,42.0,1))
55
+ assert_equal(-16.85, @grid.get(-96.86,42.4,1))
56
+ assert_equal(-16.82, @grid.get(-96.45,42.4,1))
57
+
58
+ end
52
59
  def test_each_with_doy
53
60
  layers = []
54
61
  doys = []
@@ -68,12 +75,20 @@ class TestAgwxGrid < Test::Unit::TestCase
68
75
  end
69
76
 
70
77
  def test_at_by_long_lat
78
+ assert_equal(0.4, @grid.mD.yIncr)
71
79
  latitude = @grid.latitude_for(5)
80
+ assert_equal(44.0, latitude)
72
81
  longitude = @grid.longitude_for(6)
82
+ assert_equal(-95.6, longitude)
73
83
  vals = @grid.at_by_long_lat(longitude,latitude)
74
84
  assert_equal(364, vals.keys.size)
75
85
  assert_equal(-17.42, vals[1])
76
86
  end
87
+
88
+ def test_nearest
89
+ assert_equal(0, @grid.nearest(-97.81,-98.0,0.4))
90
+ assert_equal(1, @grid.nearest(-97.79,-98.0,0.4))
91
+ end
77
92
  end
78
93
  # begin # test the Grid class
79
94
  # puts "====== initializing a grid =========="
metadata CHANGED
@@ -1,50 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: agwx_grids
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - RickWayne
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2013-12-07 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-12-11 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
14
21
  name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
17
25
  - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
26
+ - !ruby/object:Gem::Version
27
+ hash: 9
28
+ segments:
29
+ - 1
30
+ - 3
31
+ version: "1.3"
21
32
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
33
  type: :development
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
35
46
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- description: 'UW Soils Ag Weather grid data format (X by Y by DOY) '
42
- email:
47
+ type: :development
48
+ requirement: *id002
49
+ description: "UW Soils Ag Weather grid data format (X by Y by DOY) "
50
+ email:
43
51
  - fewayne@wisc.edu
44
52
  executables: []
53
+
45
54
  extensions: []
55
+
46
56
  extra_rdoc_files: []
47
- files:
57
+
58
+ files:
48
59
  - .gitignore
49
60
  - Gemfile
50
61
  - LICENSE.txt
@@ -56,30 +67,39 @@ files:
56
67
  - lib/agwx_grids/version.rb
57
68
  - test/grid_test.rb
58
69
  - test/grids/WIMNTMin2002
59
- homepage: ''
60
- licenses:
70
+ homepage: ""
71
+ licenses:
61
72
  - MIT
62
- metadata: {}
63
73
  post_install_message:
64
74
  rdoc_options: []
65
- require_paths:
75
+
76
+ require_paths:
66
77
  - lib
67
- required_ruby_version: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - '>='
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
- required_rubygems_version: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 3
93
+ segments:
94
+ - 0
95
+ version: "0"
77
96
  requirements: []
97
+
78
98
  rubyforge_project:
79
- rubygems_version: 2.0.6
99
+ rubygems_version: 1.8.25
80
100
  signing_key:
81
- specification_version: 4
101
+ specification_version: 3
82
102
  summary: UW Soils Ag Weather grid data format (X by Y by DOY)
83
- test_files:
103
+ test_files:
84
104
  - test/grid_test.rb
85
105
  - test/grids/WIMNTMin2002
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 453daf831e0ba373d2a523988e4f27b064c33a53
4
- data.tar.gz: 4b30eb84658a562f9a6667255fccb5dc60d3d73d
5
- SHA512:
6
- metadata.gz: a5677ebe08bb872308098ae970b87efd4aa6c05c1a0bd9285dd9985d8d41db613cdb355264c70252b9492cd82d15c057c8b905cd84f8da925b475ab1d523ed75
7
- data.tar.gz: 2e79c14ab75a481483fbad839778fe810ca48bbd1b9ec3f2abc41eadebb6468bafcc48a0b6f5a8fd7a2ad789189deb8fb7df1d508f55cc8a61ef00ebf4827b38