ffi-gdal 1.0.0.beta14 → 1.0.0.beta15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +6 -0
- data/lib/ffi/gdal/version.rb +1 -1
- data/lib/gdal/raster_band_classifier.rb +24 -3
- data/spec/unit/gdal/raster_band_classifier_spec.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27ce3bb913f0b8635ea76cbf5c4630815f1ac669b96d8d4b9106d51e724b88e7
|
4
|
+
data.tar.gz: 82959d4f4e6c2ebe35aaed9d37ec87c4520b17a96afd4a4ce7fa0ca72542915e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 305f98803b8e7568a43ac5e5a108283b5a3c16d9c87c440207a48227f1d3c833961ecc278994ab70830f976ac3d3f94d80e79059e9c3335964010ada30a02603
|
7
|
+
data.tar.gz: eb5b7863342eb29246bf892387ad591364fe98b3bc654dc63854d995a75d22ad4143dddebcacdb880ee6c22d8d0bcb1d8db2f6a230a9f4266b013ab4db8d2581
|
data/History.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
Format for this file derived from [http://keepachangelog.com](http://keepachangelog.com).
|
4
4
|
|
5
|
+
## 1.0.0.beta15 / 2022-05-12
|
6
|
+
|
7
|
+
### Improvements
|
8
|
+
|
9
|
+
* [DEV-20059] Ensure `GDAL::RasterBandClassifier#equal_count_ranges` has a minimum spacing between breakpoints.
|
10
|
+
|
5
11
|
## 1.0.0.beta14 / 2022-05-06
|
6
12
|
|
7
13
|
### Bug Fixes
|
data/lib/ffi/gdal/version.rb
CHANGED
@@ -19,6 +19,8 @@ module GDAL
|
|
19
19
|
#
|
20
20
|
# @param ranges [Array<Hash{range => Range, map_to => Number}>]
|
21
21
|
class RasterBandClassifier
|
22
|
+
MIN_GAP_PERCENTAGE = 0.005
|
23
|
+
|
22
24
|
include GDAL::Logger
|
23
25
|
|
24
26
|
attr_reader :ranges
|
@@ -64,14 +66,16 @@ module GDAL
|
|
64
66
|
log "Max pixel value: #{sorted_and_masked_pixels.max}"
|
65
67
|
log "Range size: #{range_size}"
|
66
68
|
|
67
|
-
break_values = Array.new(range_count) { |i| sorted_and_masked_pixels[range_size * i] }.uniq
|
69
|
+
break_values = [*Array.new(range_count) { |i| sorted_and_masked_pixels[range_size * i] }.uniq,
|
70
|
+
sorted_and_masked_pixels.max]
|
71
|
+
ensure_min_gap(break_values)
|
68
72
|
log "Break values: #{break_values}"
|
69
73
|
|
70
|
-
return if break_values.uniq.size != range_count
|
74
|
+
return if break_values.uniq.size - 1 != range_count
|
71
75
|
|
72
76
|
breakpoint_calculator = lambda do |range_number|
|
73
77
|
min = break_values[range_number]
|
74
|
-
max = break_values[range_number + 1]
|
78
|
+
max = break_values[range_number + 1]
|
75
79
|
|
76
80
|
range_for_type(min, max)
|
77
81
|
end
|
@@ -131,6 +135,23 @@ module GDAL
|
|
131
135
|
end
|
132
136
|
end
|
133
137
|
|
138
|
+
# @param break_values [Array<Numeric>]
|
139
|
+
def ensure_min_gap(break_values)
|
140
|
+
min_gap = (break_values.last - break_values.first) * MIN_GAP_PERCENTAGE
|
141
|
+
|
142
|
+
(1...break_values.size).each do |index|
|
143
|
+
left, right = break_values[index - 1, 2]
|
144
|
+
diff = right - left
|
145
|
+
adjustment = (min_gap / 2) - (diff / 2)
|
146
|
+
|
147
|
+
next unless diff < min_gap
|
148
|
+
|
149
|
+
log "Index #{index} diff #{diff} smaller than min_gap #{min_gap}, adjusting by #{adjustment}"
|
150
|
+
break_values.fill(0...index) { |x| break_values[x] - adjustment }
|
151
|
+
break_values.fill(index..) { |x| break_values[x] + adjustment }
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
134
155
|
def range_for_type(min, max)
|
135
156
|
min.to_data_type(@raster_band.data_type)..max.to_data_type(@raster_band.data_type)
|
136
157
|
end
|
@@ -107,6 +107,22 @@ RSpec.describe GDAL::RasterBandClassifier do
|
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
|
+
describe '#ensure_min_gap' do
|
111
|
+
let(:break_values) do
|
112
|
+
[29_491.177616329518, 34_999.999999999985, 34_999.99999999999, 35_000.0, 35_000.01582852495, 36_499.9508667737]
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:expected_values) do
|
116
|
+
[29_438.61973121367, 34_947.44211488414, 34_982.48598113636, 35_017.52984738857, 35_052.57371364079,
|
117
|
+
36_552.508751889545]
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'ensures breakpoints have a gap between them of 0.5% of the total range' do
|
121
|
+
subject.send(:ensure_min_gap, break_values)
|
122
|
+
expect(break_values).to eq expected_values
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
110
126
|
describe '#classify!' do
|
111
127
|
before do
|
112
128
|
ranges = subject.equal_count_ranges(10)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-gdal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Loveless
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|