ffi-gdal 1.0.0.beta13 → 1.0.0.beta16
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 +18 -0
- data/lib/ffi/gdal/version.rb +1 -1
- data/lib/gdal/dataset.rb +2 -10
- data/lib/gdal/raster_band_classifier.rb +24 -3
- data/lib/ogr/data_source.rb +2 -5
- data/spec/unit/gdal/raster_band_classifier_spec.rb +25 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 001e1f9a99984fee7d2578b7afdb7c04508d113895d2892b457685a03290efed
|
4
|
+
data.tar.gz: 896c51e4d85abdce2f743de84b0fcd199f7ac48339fefb99dea0220812073296
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e5d07dfc1ced24a5a6491d57cc32ab177de432f54477be7cda2d051633c124f07a83bec92f17551d2ca88ce113bf6589a187b3cf2dad0db70eb761a23643063
|
7
|
+
data.tar.gz: d3e425012f6ad7d119e8a3d307ece8f5b168c850037974264e01c50939105677d161ea1b430ad923ae1e85955f7d2d461ea46e0635b658535aaf3b84cf6374e5
|
data/History.md
CHANGED
@@ -2,6 +2,24 @@
|
|
2
2
|
|
3
3
|
Format for this file derived from [http://keepachangelog.com](http://keepachangelog.com).
|
4
4
|
|
5
|
+
## 1.0.0.beta16 / 2022-06-09
|
6
|
+
|
7
|
+
### Bug Fixes
|
8
|
+
|
9
|
+
* [DEV-34269] Ensure `GDAL::RasterBandClassifier#equal_count_ranges` returns a range when only one is requested.
|
10
|
+
|
11
|
+
## 1.0.0.beta15 / 2022-05-12
|
12
|
+
|
13
|
+
### Improvements
|
14
|
+
|
15
|
+
* [DEV-20059] Ensure `GDAL::RasterBandClassifier#equal_count_ranges` has a minimum spacing between breakpoints.
|
16
|
+
|
17
|
+
## 1.0.0.beta14 / 2022-05-06
|
18
|
+
|
19
|
+
### Bug Fixes
|
20
|
+
|
21
|
+
* [DEV-34133] Don't URI.parse path in `GDAL::Dataset#initialize` and `OGR::DataSource#initialize`.
|
22
|
+
|
5
23
|
## 1.0.0.beta13 / 2022-04-20
|
6
24
|
|
7
25
|
### Bug Fixes
|
data/lib/ffi/gdal/version.rb
CHANGED
data/lib/gdal/dataset.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
3
|
require_relative '../gdal'
|
5
4
|
require_relative '../ogr'
|
6
5
|
require_relative 'major_object'
|
@@ -60,17 +59,10 @@ module GDAL
|
|
60
59
|
def initialize(path_or_pointer, access_flag, shared_open = true)
|
61
60
|
@c_pointer =
|
62
61
|
if path_or_pointer.is_a? String
|
63
|
-
file_path = begin
|
64
|
-
uri = URI.parse(path_or_pointer)
|
65
|
-
uri.scheme.nil? ? ::File.expand_path(path_or_pointer) : path_or_pointer
|
66
|
-
rescue URI::InvalidURIError
|
67
|
-
path_or_pointer
|
68
|
-
end
|
69
|
-
|
70
62
|
if shared_open
|
71
|
-
FFI::GDAL::GDAL.GDALOpenShared(
|
63
|
+
FFI::GDAL::GDAL.GDALOpenShared(path_or_pointer, ACCESS_FLAGS[access_flag])
|
72
64
|
else
|
73
|
-
FFI::GDAL::GDAL.GDALOpen(
|
65
|
+
FFI::GDAL::GDAL.GDALOpen(path_or_pointer, ACCESS_FLAGS[access_flag])
|
74
66
|
end
|
75
67
|
else
|
76
68
|
path_or_pointer
|
@@ -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 range_count != 1 && 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
|
data/lib/ogr/data_source.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
3
|
require 'json'
|
5
4
|
require_relative '../gdal'
|
6
5
|
require_relative '../ogr'
|
@@ -41,14 +40,12 @@ module OGR
|
|
41
40
|
def initialize(path_or_pointer, access_flag)
|
42
41
|
@c_pointer =
|
43
42
|
if path_or_pointer.is_a?(String)
|
44
|
-
|
45
|
-
file_path = uri.scheme.nil? ? ::File.expand_path(path_or_pointer) : path_or_pointer
|
46
|
-
FFI::OGR::API.OGROpen(file_path, OGR._boolean_access_flag(access_flag), nil)
|
43
|
+
FFI::OGR::API.OGROpen(path_or_pointer, OGR._boolean_access_flag(access_flag), nil)
|
47
44
|
else
|
48
45
|
path_or_pointer
|
49
46
|
end
|
50
47
|
|
51
|
-
raise OGR::OpenFailure,
|
48
|
+
raise OGR::OpenFailure, path_or_pointer if @c_pointer.null?
|
52
49
|
|
53
50
|
@layers = []
|
54
51
|
end
|
@@ -97,6 +97,15 @@ RSpec.describe GDAL::RasterBandClassifier do
|
|
97
97
|
it { is_expected.to be_nil }
|
98
98
|
end
|
99
99
|
|
100
|
+
context 'all same value' do
|
101
|
+
let(:band_narray) { Numo::Int8.new(3, 5).fill(1) }
|
102
|
+
before { allow(raster_band).to receive(:to_nna).and_return(band_narray) }
|
103
|
+
|
104
|
+
it 'returns a single range when 1 is requested' do
|
105
|
+
expect(subject.equal_count_ranges(1)).to eq [{ range: 1..1, map_to: 1 }]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
100
109
|
context 'all nodata pixels' do
|
101
110
|
let(:band_narray) { Numo::Int8.new(3, 5).fill(0) }
|
102
111
|
before { allow(raster_band).to receive(:to_nna).and_return(band_narray) }
|
@@ -107,6 +116,22 @@ RSpec.describe GDAL::RasterBandClassifier do
|
|
107
116
|
end
|
108
117
|
end
|
109
118
|
|
119
|
+
describe '#ensure_min_gap' do
|
120
|
+
let(:break_values) do
|
121
|
+
[29_491.177616329518, 34_999.999999999985, 34_999.99999999999, 35_000.0, 35_000.01582852495, 36_499.9508667737]
|
122
|
+
end
|
123
|
+
|
124
|
+
let(:expected_values) do
|
125
|
+
[29_438.61973121367, 34_947.44211488414, 34_982.48598113636, 35_017.52984738857, 35_052.57371364079,
|
126
|
+
36_552.508751889545]
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'ensures breakpoints have a gap between them of 0.5% of the total range' do
|
130
|
+
subject.send(:ensure_min_gap, break_values)
|
131
|
+
expect(break_values).to eq expected_values
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
110
135
|
describe '#classify!' do
|
111
136
|
before do
|
112
137
|
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.beta16
|
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-
|
11
|
+
date: 2022-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -543,7 +543,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
543
543
|
- !ruby/object:Gem::Version
|
544
544
|
version: 1.3.1
|
545
545
|
requirements: []
|
546
|
-
rubygems_version: 3.
|
546
|
+
rubygems_version: 3.3.7
|
547
547
|
signing_key:
|
548
548
|
specification_version: 4
|
549
549
|
summary: FFI wrapper for GDAL/OGR.
|