ffi-gdal 1.0.0.beta14 → 1.0.0.beta15
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.
- 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
|