h3 3.5.0 → 3.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +6 -4
- data/README.md +7 -7
- data/h3.gemspec +1 -0
- data/lib/h3.rb +8 -23
- data/lib/h3/bindings/base.rb +1 -0
- data/lib/h3/geo_json.rb +1 -1
- data/lib/h3/hierarchy.rb +27 -9
- data/lib/h3/indexing.rb +25 -7
- data/lib/h3/inspection.rb +77 -25
- data/lib/h3/miscellaneous.rb +27 -9
- data/lib/h3/traversal.rb +27 -9
- data/lib/h3/unidirectional_edges.rb +70 -15
- data/lib/h3/version.rb +1 -1
- data/spec/hierarchy_spec.rb +13 -13
- data/spec/indexing_spec.rb +15 -15
- data/spec/inspection_spec.rb +17 -17
- data/spec/miscellaneous_spec.rb +6 -6
- data/spec/traversal_spec.rb +6 -6
- data/spec/unidirectional_edges_spec.rb +18 -18
- metadata +16 -3
- data/lib/h3/bindings.rb +0 -12
data/lib/h3/miscellaneous.rb
CHANGED
@@ -70,18 +70,24 @@ module H3
|
|
70
70
|
# @return [Float] Average hexagon area in square metres.
|
71
71
|
attach_function :hex_area_m2, :hexAreaM2, [Resolution], :double
|
72
72
|
|
73
|
-
# @!method
|
73
|
+
# @!method hexagon_count(resolution)
|
74
74
|
#
|
75
75
|
# Number of unique H3 indexes at the given resolution.
|
76
76
|
#
|
77
77
|
# @param [Integer] resolution Resolution.
|
78
78
|
#
|
79
79
|
# @example Find number of hexagons at resolution 6
|
80
|
-
# H3.
|
80
|
+
# H3.hexagon_count(6)
|
81
81
|
# 14117882
|
82
82
|
#
|
83
83
|
# @return [Integer] Number of unique hexagons
|
84
|
-
attach_function :
|
84
|
+
attach_function :hexagon_count, :numHexagons, [Resolution], :ulong_long
|
85
|
+
|
86
|
+
# @deprecated Please use {#hexagon_count} instead.
|
87
|
+
def num_hexagons(resolution)
|
88
|
+
hexagon_count(resolution)
|
89
|
+
end
|
90
|
+
deprecate :num_hexagons, :hexagon_count, 2020, 1
|
85
91
|
|
86
92
|
# @!method rads_to_degs(rads)
|
87
93
|
#
|
@@ -96,28 +102,40 @@ module H3
|
|
96
102
|
# @return [Float] Value expressed in degrees.
|
97
103
|
attach_function :rads_to_degs, :radsToDegs, %i[double], :double
|
98
104
|
|
99
|
-
# @!method
|
105
|
+
# @!method base_cell_count
|
100
106
|
#
|
101
107
|
# Returns the number of resolution 0 hexagons (base cells).
|
102
108
|
#
|
103
109
|
# @example Return the number of base cells
|
104
|
-
# H3.
|
110
|
+
# H3.base_cell_count
|
105
111
|
# 122
|
106
112
|
#
|
107
113
|
# @return [Integer] The number of resolution 0 hexagons (base cells).
|
108
|
-
attach_function :
|
114
|
+
attach_function :base_cell_count, :res0IndexCount, [], :int
|
115
|
+
|
116
|
+
# @deprecated Please use {#base_cell_count} instead.
|
117
|
+
def res_0_index_count
|
118
|
+
base_cell_count
|
119
|
+
end
|
120
|
+
deprecate :res_0_index_count, :base_cell_count, 2020, 1
|
109
121
|
|
110
122
|
# Returns all resolution 0 hexagons (base cells).
|
111
123
|
#
|
112
124
|
# @example Return all base cells.
|
113
|
-
# H3.
|
125
|
+
# H3.base_cells
|
114
126
|
# [576495936675512319, 576531121047601151, ..., 580753245698260991]
|
115
127
|
#
|
116
128
|
# @return [Array<Integer>] All resolution 0 hexagons (base cells).
|
117
|
-
def
|
118
|
-
out = H3Indexes.of_size(
|
129
|
+
def base_cells
|
130
|
+
out = H3Indexes.of_size(base_cell_count)
|
119
131
|
Bindings::Private.res_0_indexes(out)
|
120
132
|
out.read
|
121
133
|
end
|
134
|
+
|
135
|
+
# @deprecated Please use {#base_cells} instead.
|
136
|
+
def res_0_indexes
|
137
|
+
base_cells
|
138
|
+
end
|
139
|
+
deprecate :res_0_indexes, :base_cells, 2020, 1
|
122
140
|
end
|
123
141
|
end
|
data/lib/h3/traversal.rb
CHANGED
@@ -18,7 +18,7 @@ module H3
|
|
18
18
|
# @return [Integer] Maximum k-ring size.
|
19
19
|
attach_function :max_kring_size, :maxKringSize, %i[k_distance], :int
|
20
20
|
|
21
|
-
# @!method
|
21
|
+
# @!method distance(origin, h3_index)
|
22
22
|
#
|
23
23
|
# Derive the distance between two H3 indexes.
|
24
24
|
#
|
@@ -26,13 +26,19 @@ module H3
|
|
26
26
|
# @param [Integer] h3_index H3 index
|
27
27
|
#
|
28
28
|
# @example Derive the distance between two H3 indexes.
|
29
|
-
# H3.
|
29
|
+
# H3.distance(617700169983721471, 617700169959866367)
|
30
30
|
# 5
|
31
31
|
#
|
32
32
|
# @return [Integer] Distance between indexes.
|
33
|
-
attach_function :
|
33
|
+
attach_function :distance, :h3Distance, %i[h3_index h3_index], :k_distance
|
34
34
|
|
35
|
-
#
|
35
|
+
# @deprecated Please use {#distance} instead.
|
36
|
+
def h3_distance(origin, destination)
|
37
|
+
distance(origin, destination)
|
38
|
+
end
|
39
|
+
deprecate :h3_distance, :distance, 2020, 1
|
40
|
+
|
41
|
+
# @!method line_size(origin, destination)
|
36
42
|
#
|
37
43
|
# Derive the number of hexagons present in a line between two H3 indexes.
|
38
44
|
#
|
@@ -45,11 +51,17 @@ module H3
|
|
45
51
|
# @param [Integer] destination H3 index
|
46
52
|
#
|
47
53
|
# @example Derive the number of hexagons present in a line between two H3 indexes.
|
48
|
-
# H3.
|
54
|
+
# H3.line_size(617700169983721471, 617700169959866367)
|
49
55
|
# 6
|
50
56
|
#
|
51
57
|
# @return [Integer] Number of hexagons found between indexes.
|
52
|
-
attach_function :
|
58
|
+
attach_function :line_size, :h3LineSize, %i[h3_index h3_index], :int
|
59
|
+
|
60
|
+
# @deprecated Please use {#line_size} instead.
|
61
|
+
def h3_line_size(origin, destination)
|
62
|
+
line_size(origin, destination)
|
63
|
+
end
|
64
|
+
deprecate :h3_line_size, :line_size, 2020, 1
|
53
65
|
|
54
66
|
# Derives H3 indexes within k distance of the origin H3 index.
|
55
67
|
#
|
@@ -288,7 +300,7 @@ module H3
|
|
288
300
|
# @param [Integer] destination Destination H3 index.
|
289
301
|
#
|
290
302
|
# @example Derive the indexes found in a line.
|
291
|
-
# H3.
|
303
|
+
# H3.line(617700169983721471, 617700169959866367)
|
292
304
|
# [
|
293
305
|
# 617700169983721471, 617700169984245759, 617700169988177919,
|
294
306
|
# 617700169986867199, 617700169987391487, 617700169959866367
|
@@ -297,14 +309,20 @@ module H3
|
|
297
309
|
# @raise [ArgumentError] Could not compute line
|
298
310
|
#
|
299
311
|
# @return [Array<Integer>] H3 indexes
|
300
|
-
def
|
301
|
-
max_hexagons =
|
312
|
+
def line(origin, destination)
|
313
|
+
max_hexagons = line_size(origin, destination)
|
302
314
|
hexagons = H3Indexes.of_size(max_hexagons)
|
303
315
|
res = Bindings::Private.h3_line(origin, destination, hexagons)
|
304
316
|
raise(ArgumentError, "Could not compute line") if res.negative?
|
305
317
|
hexagons.read
|
306
318
|
end
|
307
319
|
|
320
|
+
# @deprecated Please use {#line} instead.
|
321
|
+
def h3_line(origin, destination)
|
322
|
+
line(origin, destination)
|
323
|
+
end
|
324
|
+
deprecate :h3_line, :line, 2020, 1
|
325
|
+
|
308
326
|
private
|
309
327
|
|
310
328
|
def k_rings_for_hex_range(indexes, k)
|
@@ -5,7 +5,7 @@ module H3
|
|
5
5
|
module UnidirectionalEdges
|
6
6
|
extend H3::Bindings::Base
|
7
7
|
|
8
|
-
# @!method
|
8
|
+
# @!method neighbors?(origin, destination)
|
9
9
|
#
|
10
10
|
# Determine whether two H3 indexes are neighbors.
|
11
11
|
#
|
@@ -13,29 +13,47 @@ module H3
|
|
13
13
|
# @param [Integer] destination Destination H3 index
|
14
14
|
#
|
15
15
|
# @example Check two H3 indexes
|
16
|
-
# H3.
|
16
|
+
# H3.neighbors?(617700169958293503, 617700169958031359)
|
17
17
|
# true
|
18
18
|
#
|
19
19
|
# @return [Boolean] True if indexes are neighbors
|
20
|
-
attach_function :
|
20
|
+
attach_function :neighbors, :h3IndexesAreNeighbors, %i[h3_index h3_index], :bool
|
21
|
+
alias_method :neighbors?, :neighbors
|
22
|
+
undef_method :neighbors
|
21
23
|
|
22
|
-
#
|
24
|
+
# @deprecated Please use {#neighbors?} instead.
|
25
|
+
def h3_indexes_neighbors?(origin, destination)
|
26
|
+
neighbors?(origin, destination)
|
27
|
+
end
|
28
|
+
|
29
|
+
deprecate :h3_indexes_neighbors?, :neighbors?, 2020, 1
|
30
|
+
|
31
|
+
# @!method unidirectional_edge_valid?(h3_index)
|
23
32
|
#
|
24
33
|
# Determine whether the given H3 index represents an edge.
|
25
34
|
#
|
26
35
|
# @param [Integer] h3_index H3 index
|
27
36
|
#
|
28
37
|
# @example Check if H3 index is a valid unidirectional edge.
|
29
|
-
# H3.
|
38
|
+
# H3.unidirectional_edge_valid?(1266218516299644927)
|
30
39
|
# true
|
31
40
|
#
|
32
41
|
# @return [Boolean] True if H3 index is a valid unidirectional edge
|
33
|
-
attach_function :
|
42
|
+
attach_function :unidirectional_edge_valid,
|
34
43
|
:h3UnidirectionalEdgeIsValid,
|
35
44
|
%i[h3_index],
|
36
45
|
:bool
|
46
|
+
alias_method :unidirectional_edge_valid?, :unidirectional_edge_valid
|
47
|
+
undef_method :unidirectional_edge_valid
|
48
|
+
|
49
|
+
# @deprecated Please use {#unidirectional_edge_valid?} instead.
|
50
|
+
def h3_unidirectional_edge_valid?(h3_index)
|
51
|
+
unidirectional_edge_valid?(h3_index)
|
52
|
+
end
|
53
|
+
|
54
|
+
deprecate :h3_unidirectional_edge_valid?, :unidirectional_edge_valid?, 2020, 1
|
37
55
|
|
38
|
-
# @!method
|
56
|
+
# @!method unidirectional_edge(origin, destination)
|
39
57
|
#
|
40
58
|
# Derives the H3 index of the edge from the given H3 indexes.
|
41
59
|
#
|
@@ -43,15 +61,22 @@ module H3
|
|
43
61
|
# @param [Integer] destination H3 index
|
44
62
|
#
|
45
63
|
# @example Derive the H3 edge index between two H3 indexes
|
46
|
-
# H3.
|
64
|
+
# H3.unidirectional_edge(617700169958293503, 617700169958031359)
|
47
65
|
# 1626506486489284607
|
48
66
|
#
|
49
67
|
# @return [Integer] H3 edge index
|
50
|
-
attach_function :
|
68
|
+
attach_function :unidirectional_edge,
|
51
69
|
:getH3UnidirectionalEdge,
|
52
70
|
%i[h3_index h3_index],
|
53
71
|
:h3_index
|
54
72
|
|
73
|
+
# @deprecated Please use {#unidirectional_edge} instead.
|
74
|
+
def h3_unidirectional_edge(origin, destination)
|
75
|
+
unidirectional_edge(origin, destination)
|
76
|
+
end
|
77
|
+
|
78
|
+
deprecate :h3_unidirectional_edge, :unidirectional_edge, 2020, 1
|
79
|
+
|
55
80
|
# @!method destination_from_unidirectional_edge(edge)
|
56
81
|
#
|
57
82
|
# Derive destination H3 index from edge.
|
@@ -93,42 +118,62 @@ module H3
|
|
93
118
|
# @param [Integer] edge H3 edge index
|
94
119
|
#
|
95
120
|
# @example Get origin and destination indexes from edge
|
96
|
-
# H3.
|
121
|
+
# H3.origin_and_destination_from_unidirectional_edge(1266218516299644927)
|
97
122
|
# [617700169958293503, 617700169961177087]
|
98
123
|
#
|
99
124
|
# @return [Array<Integer>] H3 index array.
|
100
|
-
def
|
125
|
+
def origin_and_destination_from_unidirectional_edge(edge)
|
101
126
|
max_hexagons = 2
|
102
127
|
out = H3Indexes.of_size(max_hexagons)
|
103
128
|
Bindings::Private.h3_indexes_from_unidirectional_edge(edge, out)
|
104
129
|
out.read
|
105
130
|
end
|
106
131
|
|
132
|
+
# @deprecated Please use {#origin_and_destination_from_unidirectional_edge} instead.
|
133
|
+
def h3_indexes_from_unidirectional_edge(edge)
|
134
|
+
origin_and_destination_from_unidirectional_edge(edge)
|
135
|
+
end
|
136
|
+
|
137
|
+
deprecate :h3_indexes_from_unidirectional_edge,
|
138
|
+
:origin_and_destination_from_unidirectional_edge,
|
139
|
+
2020,
|
140
|
+
1
|
141
|
+
|
107
142
|
# Derive unidirectional edges for a H3 index.
|
108
143
|
#
|
109
144
|
# @param [Integer] origin H3 index
|
110
145
|
#
|
111
146
|
# @example Get unidirectional indexes from hexagon
|
112
|
-
# H3.
|
147
|
+
# H3.unidirectional_edges_from_hexagon(612933930963697663)
|
113
148
|
# [
|
114
149
|
# 1261452277305049087, 1333509871342977023, 1405567465380904959,
|
115
150
|
# 1477625059418832895, 1549682653456760831, 1621740247494688767
|
116
151
|
# ]
|
117
152
|
#
|
118
153
|
# @return [Array<Integer>] H3 index array.
|
119
|
-
def
|
154
|
+
def unidirectional_edges_from_hexagon(origin)
|
120
155
|
max_edges = 6
|
121
156
|
out = H3Indexes.of_size(max_edges)
|
122
157
|
Bindings::Private.h3_unidirectional_edges_from_hexagon(origin, out)
|
123
158
|
out.read
|
124
159
|
end
|
125
160
|
|
161
|
+
# @deprecated Please use {#unidirectional_edges_from_hexagon} instead.
|
162
|
+
def h3_unidirectional_edges_from_hexagon(origin)
|
163
|
+
unidirectional_edges_from_hexagon(origin)
|
164
|
+
end
|
165
|
+
|
166
|
+
deprecate :h3_unidirectional_edges_from_hexagon,
|
167
|
+
:unidirectional_edges_from_hexagon,
|
168
|
+
2020,
|
169
|
+
1
|
170
|
+
|
126
171
|
# Derive coordinates for edge boundary.
|
127
172
|
#
|
128
173
|
# @param [Integer] edge H3 edge index
|
129
174
|
#
|
130
175
|
# @example
|
131
|
-
# H3.
|
176
|
+
# H3.unidirectional_edge_boundary(612933930963697663)
|
132
177
|
# [
|
133
178
|
# [68.92995788193981, 31.831280499087402], [69.39359648991828, 62.345344956509784],
|
134
179
|
# [76.163042830191, 94.14309010184775], [87.36469532319619, 145.5581976913368],
|
@@ -136,12 +181,22 @@ module H3
|
|
136
181
|
# ]
|
137
182
|
#
|
138
183
|
# @return [Array<Array<Float>>] Edge boundary coordinates for a hexagon
|
139
|
-
def
|
184
|
+
def unidirectional_edge_boundary(edge)
|
140
185
|
geo_boundary = GeoBoundary.new
|
141
186
|
Bindings::Private.h3_unidirectional_edge_boundary(edge, geo_boundary)
|
142
187
|
geo_boundary[:verts].take(geo_boundary[:num_verts]).map do |d|
|
143
188
|
[rads_to_degs(d[:lat]), rads_to_degs(d[:lon])]
|
144
189
|
end
|
145
190
|
end
|
191
|
+
|
192
|
+
# @deprecated Please use {#unidirectional_edge_boundary} instead.
|
193
|
+
def h3_unidirectional_edge_boundary(edge)
|
194
|
+
unidirectional_edge_boundary(edge)
|
195
|
+
end
|
196
|
+
|
197
|
+
deprecate :h3_unidirectional_edge_boundary,
|
198
|
+
:unidirectional_edge_boundary,
|
199
|
+
2020,
|
200
|
+
1
|
146
201
|
end
|
147
202
|
end
|
data/lib/h3/version.rb
CHANGED
data/spec/hierarchy_spec.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
RSpec.describe H3 do
|
2
2
|
include_context "constants"
|
3
3
|
|
4
|
-
describe ".
|
4
|
+
describe ".parent" do
|
5
5
|
let(:h3_index) { "89283082993ffff".to_i(16) }
|
6
6
|
let(:parent_resolution) { 8 }
|
7
7
|
let(:result) { "8828308299fffff".to_i(16) }
|
8
8
|
|
9
|
-
subject(:
|
9
|
+
subject(:parent) { H3.parent(h3_index, parent_resolution) }
|
10
10
|
|
11
11
|
it { is_expected.to eq(result) }
|
12
12
|
end
|
13
13
|
|
14
|
-
describe ".
|
14
|
+
describe ".children" do
|
15
15
|
let(:h3_index) { "8928308280fffff".to_i(16) }
|
16
16
|
|
17
|
-
subject(:
|
17
|
+
subject(:children) { H3.children(h3_index, child_resolution) }
|
18
18
|
|
19
19
|
context "when resolution is 3" do
|
20
20
|
let(:child_resolution) { 3 }
|
21
21
|
let(:count) { 0 }
|
22
22
|
|
23
23
|
it "has 0 children" do
|
24
|
-
expect(
|
24
|
+
expect(children.count).to eq count
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -31,11 +31,11 @@ RSpec.describe H3 do
|
|
31
31
|
let(:expected) { "8928308280fffff".to_i(16) }
|
32
32
|
|
33
33
|
it "has 1 child" do
|
34
|
-
expect(
|
34
|
+
expect(children.count).to eq count
|
35
35
|
end
|
36
36
|
|
37
37
|
it "is the expected value" do
|
38
|
-
expect(
|
38
|
+
expect(children.first).to eq expected
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -44,7 +44,7 @@ RSpec.describe H3 do
|
|
44
44
|
let(:count) { 7 }
|
45
45
|
|
46
46
|
it "has 7 children" do
|
47
|
-
expect(
|
47
|
+
expect(children.count).to eq count
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -53,7 +53,7 @@ RSpec.describe H3 do
|
|
53
53
|
let(:count) { 117649 }
|
54
54
|
|
55
55
|
it "has 117649 children" do
|
56
|
-
expect(
|
56
|
+
expect(children.count).to eq count
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -61,7 +61,7 @@ RSpec.describe H3 do
|
|
61
61
|
let(:child_resolution) { -1 }
|
62
62
|
|
63
63
|
it "raises an error" do
|
64
|
-
expect {
|
64
|
+
expect { children }.to raise_error(ArgumentError)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -69,15 +69,15 @@ RSpec.describe H3 do
|
|
69
69
|
let(:child_resolution) { 16 }
|
70
70
|
|
71
71
|
it "raises an error" do
|
72
|
-
expect {
|
72
|
+
expect { children }.to raise_error(ArgumentError)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
describe ".
|
77
|
+
describe ".max_children" do
|
78
78
|
let(:h3_index) { "8928308280fffff".to_i(16) }
|
79
79
|
|
80
|
-
subject(:
|
80
|
+
subject(:max_children) { H3.max_children(h3_index, child_resolution) }
|
81
81
|
|
82
82
|
context "when resolution is 3" do
|
83
83
|
let(:child_resolution) { 3 }
|
data/spec/indexing_spec.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
RSpec.describe H3 do
|
2
2
|
include_context "constants"
|
3
3
|
|
4
|
-
describe ".
|
4
|
+
describe ".from_geo_coordinates" do
|
5
5
|
let(:resolution) { 8 }
|
6
6
|
let(:coords) { [53.959130, -1.079230]}
|
7
7
|
let(:result) { valid_h3_index }
|
8
8
|
|
9
|
-
subject(:
|
9
|
+
subject(:from_geo_coordinates) { H3.from_geo_coordinates(coords, resolution) }
|
10
10
|
|
11
11
|
it { is_expected.to eq(result) }
|
12
12
|
|
@@ -14,7 +14,7 @@ RSpec.describe H3 do
|
|
14
14
|
let(:coords) { [1, 2, 3] }
|
15
15
|
|
16
16
|
it "raises an error" do
|
17
|
-
expect {
|
17
|
+
expect { from_geo_coordinates }.to raise_error(ArgumentError)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -22,7 +22,7 @@ RSpec.describe H3 do
|
|
22
22
|
let(:coords) { "boom" }
|
23
23
|
|
24
24
|
it "raises an error" do
|
25
|
-
expect {
|
25
|
+
expect { from_geo_coordinates }.to raise_error(ArgumentError)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -30,31 +30,31 @@ RSpec.describe H3 do
|
|
30
30
|
let(:coords) { [-1.1323222, 190.1020102] }
|
31
31
|
|
32
32
|
it "raises an error" do
|
33
|
-
expect {
|
33
|
+
expect { from_geo_coordinates }.to raise_error(ArgumentError)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
describe ".
|
38
|
+
describe ".to_geo_coordinates" do
|
39
39
|
let(:h3_index) { valid_h3_index }
|
40
40
|
let(:expected_lat) { 53.95860421941 }
|
41
41
|
let(:expected_lon) { -1.08119564709 }
|
42
42
|
|
43
|
-
subject(:
|
43
|
+
subject(:to_geo_coordinates) { H3.to_geo_coordinates(h3_index) }
|
44
44
|
|
45
45
|
it "should return the expected latitude" do
|
46
|
-
expect(
|
46
|
+
expect(to_geo_coordinates[0]).to be_within(0.000001).of(expected_lat)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should return the expected longitude" do
|
50
|
-
expect(
|
50
|
+
expect(to_geo_coordinates[1]).to be_within(0.000001).of(expected_lon)
|
51
51
|
end
|
52
52
|
|
53
53
|
context "when given an invalid h3_index" do
|
54
54
|
let(:h3_index) { "boom" }
|
55
55
|
|
56
56
|
it "raises an error" do
|
57
|
-
expect {
|
57
|
+
expect { to_geo_coordinates }.to raise_error(TypeError)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -62,12 +62,12 @@ RSpec.describe H3 do
|
|
62
62
|
let(:h3_index) { too_long_number }
|
63
63
|
|
64
64
|
it "raises an error" do
|
65
|
-
expect {
|
65
|
+
expect { to_geo_coordinates }.to raise_error(RangeError)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
describe ".
|
70
|
+
describe ".to_boundary" do
|
71
71
|
let(:h3_index) { "85283473fffffff".to_i(16) }
|
72
72
|
let(:expected) do
|
73
73
|
[
|
@@ -80,13 +80,13 @@ RSpec.describe H3 do
|
|
80
80
|
]
|
81
81
|
end
|
82
82
|
|
83
|
-
subject(:
|
83
|
+
subject(:to_boundary) { H3.to_boundary(h3_index) }
|
84
84
|
|
85
85
|
it "matches expected boundary coordinates" do
|
86
|
-
|
86
|
+
to_boundary.zip(expected) do |(lat, lon), (exp_lat, exp_lon)|
|
87
87
|
expect(lat).to be_within(0.000001).of(exp_lat)
|
88
88
|
expect(lon).to be_within(0.000001).of(exp_lon)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
92
|
-
end
|
92
|
+
end
|