h3 3.5.1 → 3.6.0

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile.lock +3 -3
  4. data/ext/h3/src/.travis.yml +15 -4
  5. data/ext/h3/src/CHANGELOG.md +7 -0
  6. data/ext/h3/src/CMakeLists.txt +15 -0
  7. data/ext/h3/src/README.md +5 -6
  8. data/ext/h3/src/VERSION +1 -1
  9. data/ext/h3/src/docs/api/hierarchy.md +8 -0
  10. data/ext/h3/src/docs/api/misc.md +18 -0
  11. data/ext/h3/src/scripts/coverage.sh.in +7 -3
  12. data/ext/h3/src/src/apps/miscapps/generateBaseCellNeighbors.c +2 -2
  13. data/ext/h3/src/src/apps/miscapps/generateNumHexagons.c +0 -2
  14. data/ext/h3/src/src/apps/testapps/testCompact.c +12 -0
  15. data/ext/h3/src/src/apps/testapps/testH3Distance.c +1 -50
  16. data/ext/h3/src/src/apps/testapps/testH3DistanceExhaustive.c +83 -0
  17. data/ext/h3/src/src/apps/testapps/testH3Line.c +1 -84
  18. data/ext/h3/src/src/apps/testapps/testH3LineExhaustive.c +114 -0
  19. data/ext/h3/src/src/apps/testapps/testH3ToCenterChild.c +67 -0
  20. data/ext/h3/src/src/apps/testapps/testH3ToChildren.c +14 -2
  21. data/ext/h3/src/src/apps/testapps/testH3ToLocalIj.c +12 -230
  22. data/ext/h3/src/src/apps/testapps/testH3ToLocalIjExhaustive.c +264 -0
  23. data/ext/h3/src/src/apps/testapps/testPentagonIndexes.c +57 -0
  24. data/ext/h3/src/src/h3lib/include/constants.h +2 -0
  25. data/ext/h3/src/src/h3lib/include/h3api.h.in +20 -0
  26. data/ext/h3/src/src/h3lib/lib/algos.c +5 -5
  27. data/ext/h3/src/src/h3lib/lib/faceijk.c +3 -3
  28. data/ext/h3/src/src/h3lib/lib/h3Index.c +69 -6
  29. data/ext/h3/src/src/h3lib/lib/localij.c +4 -4
  30. data/ext/h3/src/src/h3lib/lib/polygon.c +1 -2
  31. data/h3.gemspec +1 -1
  32. data/lib/h3/bindings/private.rb +1 -0
  33. data/lib/h3/hierarchy.rb +15 -0
  34. data/lib/h3/miscellaneous.rb +25 -0
  35. data/lib/h3/version.rb +1 -1
  36. data/spec/hierarchy_spec.rb +10 -0
  37. data/spec/miscellaneous_spec.rb +28 -0
  38. metadata +9 -4
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2018 Uber Technologies, Inc.
2
+ * Copyright 2018-2019 Uber Technologies, Inc.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -139,8 +139,8 @@ int h3ToLocalIjk(H3Index origin, H3Index h3, CoordIJK* out) {
139
139
  int baseCell = H3_GET_BASE_CELL(h3);
140
140
 
141
141
  // Direction from origin base cell to index base cell
142
- Direction dir = 0;
143
- Direction revDir = 0;
142
+ Direction dir = CENTER_DIGIT;
143
+ Direction revDir = CENTER_DIGIT;
144
144
  if (originBaseCell != baseCell) {
145
145
  dir = _getBaseCellDirection(originBaseCell, baseCell);
146
146
  if (dir == INVALID_DIGIT) {
@@ -290,7 +290,7 @@ int localIjkToH3(H3Index origin, const CoordIJK* ijk, H3Index* out) {
290
290
 
291
291
  // check for res 0/base cell
292
292
  if (res == 0) {
293
- if (ijk->i > 1 || ijk->i > 1 || ijk->i > 1) {
293
+ if (ijk->i > 1 || ijk->j > 1 || ijk->k > 1) {
294
294
  // out of range input
295
295
  return 1;
296
296
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2018 Uber Technologies, Inc.
2
+ * Copyright 2018-2019 Uber Technologies, Inc.
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@
18
18
  */
19
19
 
20
20
  #include "polygon.h"
21
- #include <assert.h>
22
21
  #include <float.h>
23
22
  #include <math.h>
24
23
  #include <stdbool.h>
data/h3.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.add_runtime_dependency "ffi", "~> 1.9"
16
16
  spec.add_runtime_dependency "rgeo-geojson", "~> 2.1"
17
- spec.add_runtime_dependency "zeitwerk", "~> 2.1.9"
17
+ spec.add_runtime_dependency "zeitwerk", "~> 2.1"
18
18
 
19
19
  spec.add_development_dependency "coveralls", "~> 0.8"
20
20
  spec.add_development_dependency "rake", "~> 12.3"
@@ -10,6 +10,7 @@ module H3
10
10
  attach_function :compact, [H3IndexesIn, H3IndexesOut, :size], :bool
11
11
  attach_function :destroy_linked_polygon, :destroyLinkedPolygon, [LinkedGeoPolygon], :void
12
12
  attach_function :geo_to_h3, :geoToH3, [GeoCoord, Resolution], :h3_index
13
+ attach_function :get_pentagon_indexes, :getPentagonIndexes, [:int, H3IndexesOut], :void
13
14
  attach_function :h3_faces, :h3GetFaces, %i[h3_index output_buffer], :void
14
15
  attach_function :h3_indexes_from_unidirectional_edge,
15
16
  :getH3IndexesFromUnidirectionalEdge,
data/lib/h3/hierarchy.rb CHANGED
@@ -39,6 +39,21 @@ module H3
39
39
  # @return [Integer] Maximum number of child hexagons possible at given resolution.
40
40
  attach_function :max_children, :maxH3ToChildrenSize, [:h3_index, Resolution], :int
41
41
 
42
+ # @!method center_child(h3_index, child_resolution)
43
+ #
44
+ # Returns the center child (finer) index contained by the given index
45
+ # at the given resolution.
46
+ #
47
+ # @param [Integer] h3_index A valid H3 index.
48
+ # @param [Integer] child_resoluton The desired resolution of the center child hexagon.
49
+ #
50
+ # @example Find center child hexagon.
51
+ # H3.center_child(613196570357137407, 10)
52
+ # 622203769609814015
53
+ #
54
+ # @return [Integer] H3 index of center child hexagon.
55
+ attach_function :center_child, :h3ToCenterChild, [:h3_index, Resolution], :h3_index
56
+
42
57
  # @deprecated Please use {#max_children} instead.
43
58
  def max_h3_to_children_size(h3_index, resolution)
44
59
  max_children(h3_index, resolution)
@@ -113,6 +113,18 @@ module H3
113
113
  # @return [Integer] The number of resolution 0 hexagons (base cells).
114
114
  attach_function :base_cell_count, :res0IndexCount, [], :int
115
115
 
116
+ # @!method pentagon_count
117
+ #
118
+ # Number of pentagon H3 indexes per resolution.
119
+ # This is always 12, but provided as a convenience.
120
+ #
121
+ # @example Return the number of pentagons
122
+ # H3.pentagon_count
123
+ # 12
124
+ #
125
+ # @return [Integer] The number of pentagons per resolution.
126
+ attach_function :pentagon_count, :pentagonIndexCount, [], :int
127
+
116
128
  # @deprecated Please use {#base_cell_count} instead.
117
129
  def res_0_index_count
118
130
  base_cell_count
@@ -132,6 +144,19 @@ module H3
132
144
  out.read
133
145
  end
134
146
 
147
+ # Returns all pentagon indexes at the given resolution.
148
+ #
149
+ # @example Return all pentagons at resolution 4.
150
+ # H3.pentagons(4)
151
+ # [594615896891195391, 594967740612083711, ..., 598591730937233407]
152
+ #
153
+ # @return [Array<Integer>] All pentagon indexes at the given resolution.
154
+ def pentagons(resolution)
155
+ out = H3Indexes.of_size(pentagon_count)
156
+ Bindings::Private.get_pentagon_indexes(resolution, out)
157
+ out.read
158
+ end
159
+
135
160
  # @deprecated Please use {#base_cells} instead.
136
161
  def res_0_indexes
137
162
  base_cells
data/lib/h3/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module H3
2
- VERSION = "3.5.1".freeze
2
+ VERSION = "3.6.0".freeze
3
3
  end
@@ -172,4 +172,14 @@ RSpec.describe H3 do
172
172
  end
173
173
  end
174
174
  end
175
+
176
+ describe ".center_child" do
177
+ let(:h3_index) { "8828308299fffff".to_i(16) }
178
+ let(:resolution) { 10 }
179
+ let(:result) { "8a2830829807fff".to_i(16) }
180
+
181
+ subject(:center_child) { H3.center_child(h3_index, resolution) }
182
+
183
+ it { is_expected.to eq result }
184
+ end
175
185
  end
@@ -81,4 +81,32 @@ RSpec.describe H3 do
81
81
  expect(base_cells.count).to eq(count)
82
82
  end
83
83
  end
84
+
85
+ describe ".pentagon_count" do
86
+ let(:count) { 12 }
87
+ subject(:pentagon_count) { H3.pentagon_count }
88
+
89
+ it "has 12 pentagons per resolution" do
90
+ expect(pentagon_count).to eq(count)
91
+ end
92
+ end
93
+
94
+ describe ".pentagons" do
95
+ let(:resolution) { 4 }
96
+ let(:expected) do
97
+ [
98
+ 594615896891195391, 594967740612083711,
99
+ 595319584332972031, 595812165542215679,
100
+ 596199193635192831, 596515852983992319,
101
+ 596691774844436479, 597008434193235967,
102
+ 597395462286213119, 597888043495456767,
103
+ 598239887216345087, 598591730937233407
104
+ ]
105
+ end
106
+ subject(:pentagons) { H3.pentagons(resolution) }
107
+
108
+ it "returns pentagons at the given resolution" do
109
+ expect(pentagons).to eq(expected)
110
+ end
111
+ end
84
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: h3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.1
4
+ version: 3.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lachlan Laycock
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-08-05 00:00:00.000000000 Z
12
+ date: 2019-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 2.1.9
48
+ version: '2.1'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 2.1.9
55
+ version: '2.1'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: coveralls
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -225,16 +225,20 @@ files:
225
225
  - ext/h3/src/src/apps/testapps/testGeoToH3.c
226
226
  - ext/h3/src/src/apps/testapps/testH3Api.c
227
227
  - ext/h3/src/src/apps/testapps/testH3Distance.c
228
+ - ext/h3/src/src/apps/testapps/testH3DistanceExhaustive.c
228
229
  - ext/h3/src/src/apps/testapps/testH3GetFaces.c
229
230
  - ext/h3/src/src/apps/testapps/testH3Index.c
230
231
  - ext/h3/src/src/apps/testapps/testH3Line.c
232
+ - ext/h3/src/src/apps/testapps/testH3LineExhaustive.c
231
233
  - ext/h3/src/src/apps/testapps/testH3NeighborRotations.c
232
234
  - ext/h3/src/src/apps/testapps/testH3SetToLinkedGeo.c
233
235
  - ext/h3/src/src/apps/testapps/testH3SetToVertexGraph.c
236
+ - ext/h3/src/src/apps/testapps/testH3ToCenterChild.c
234
237
  - ext/h3/src/src/apps/testapps/testH3ToChildren.c
235
238
  - ext/h3/src/src/apps/testapps/testH3ToGeo.c
236
239
  - ext/h3/src/src/apps/testapps/testH3ToGeoBoundary.c
237
240
  - ext/h3/src/src/apps/testapps/testH3ToLocalIj.c
241
+ - ext/h3/src/src/apps/testapps/testH3ToLocalIjExhaustive.c
238
242
  - ext/h3/src/src/apps/testapps/testH3ToParent.c
239
243
  - ext/h3/src/src/apps/testapps/testH3UniEdge.c
240
244
  - ext/h3/src/src/apps/testapps/testHexRanges.c
@@ -242,6 +246,7 @@ files:
242
246
  - ext/h3/src/src/apps/testapps/testKRing.c
243
247
  - ext/h3/src/src/apps/testapps/testLinkedGeo.c
244
248
  - ext/h3/src/src/apps/testapps/testMaxH3ToChildrenSize.c
249
+ - ext/h3/src/src/apps/testapps/testPentagonIndexes.c
245
250
  - ext/h3/src/src/apps/testapps/testPolyfill.c
246
251
  - ext/h3/src/src/apps/testapps/testPolygon.c
247
252
  - ext/h3/src/src/apps/testapps/testVec2d.c