tiletanic 0.1.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.
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ class BasicTilingBottomLeftTest < Minitest::Test
6
+ include GeometryAssertions
7
+
8
+ def setup
9
+ @tiler = Tiletanic::TileSchemes::BasicTilingBottomLeft.new(0, 0, 1, 1)
10
+ end
11
+
12
+ def test_init_validates_bounds
13
+ assert_raises(ArgumentError) { Tiletanic::TileSchemes::BasicTilingBottomLeft.new(1, 0, 1, 1) }
14
+ assert_raises(ArgumentError) { Tiletanic::TileSchemes::BasicTilingBottomLeft.new(0, 1, 1, 1) }
15
+ end
16
+
17
+ def test_tile_parent_children_and_quadkeys
18
+ assert_equal Tiletanic::Tile.new(x: 0, y: 0, z: 0), @tiler.tile(0.0, 0.0, 0)
19
+ assert_equal Tiletanic::Tile.new(x: 1, y: 1, z: 1), @tiler.tile(0.75, 0.75, 1)
20
+ assert_equal Tiletanic::Tile.new(x: 1, y: 1, z: 1), @tiler.parent(2, 3, 2)
21
+ assert_equal Set[
22
+ Tiletanic::Tile.new(x: 0, y: 0, z: 1),
23
+ Tiletanic::Tile.new(x: 1, y: 0, z: 1),
24
+ Tiletanic::Tile.new(x: 0, y: 1, z: 1),
25
+ Tiletanic::Tile.new(x: 1, y: 1, z: 1)
26
+ ], @tiler.children(0, 0, 0).to_set
27
+ assert_equal '', @tiler.quadkey(0, 0, 0)
28
+ assert_equal '3', @tiler.quadkey(1, 1, 1)
29
+ assert_equal Tiletanic::Tile.new(x: 405, y: 184, z: 9), @tiler.quadkey_to_tile('130232101')
30
+ end
31
+
32
+ def test_corner_coordinate_helpers
33
+ assert_coords(0.0, 1.0, @tiler.ul(0, 0, 0))
34
+ assert_coords(1.0, 0.0, @tiler.br(0, 0, 0))
35
+ assert_bbox(
36
+ { xmin: 0.5, ymin: 0.5, xmax: 1.0, ymax: 1.0 },
37
+ @tiler.bbox(1, 1, 1)
38
+ )
39
+ end
40
+ end
41
+
42
+ class BasicTilingTopLeftTest < Minitest::Test
43
+ include GeometryAssertions
44
+
45
+ WEB_MERCATOR_LIMIT = 20_037_508.342789244
46
+
47
+ def setup
48
+ @tiler = Tiletanic::TileSchemes::BasicTilingTopLeft.new(
49
+ -WEB_MERCATOR_LIMIT,
50
+ -WEB_MERCATOR_LIMIT,
51
+ WEB_MERCATOR_LIMIT,
52
+ WEB_MERCATOR_LIMIT
53
+ )
54
+ end
55
+
56
+ def test_tile_generation_matches_python_reference_values
57
+ assert_equal Tiletanic::Tile.new(x: 0, y: 0, z: 0), @tiler.tile(0.0, 0.0, 0)
58
+ assert_equal Tiletanic::Tile.new(x: 0, y: 3, z: 2),
59
+ @tiler.tile((-WEB_MERCATOR_LIMIT + -10_018_754.171394622) / 2.0,
60
+ (-WEB_MERCATOR_LIMIT + -10_018_754.171394622) / 2.0, 2)
61
+ assert_equal Tiletanic::Tile.new(x: 3, y: 5, z: 4),
62
+ @tiler.tile((-12_523_442.714243278 + -10_018_754.171394622) / 2.0,
63
+ (5_009_377.085697312 + 7_514_065.628545966) / 2.0, 4)
64
+ end
65
+
66
+ def test_bbox_helpers
67
+ assert_coords(-WEB_MERCATOR_LIMIT, WEB_MERCATOR_LIMIT, @tiler.ul(0, 0, 0))
68
+ assert_coords(WEB_MERCATOR_LIMIT, -WEB_MERCATOR_LIMIT, @tiler.br(0, 0, 0))
69
+ assert_bbox(
70
+ {
71
+ xmin: -15_028_131.257091932,
72
+ ymin: -10_018_754.17139462,
73
+ xmax: -10_018_754.171394622,
74
+ ymax: -5_009_377.085697312
75
+ },
76
+ @tiler.bbox(1, 5, 3),
77
+ delta: 1e-6
78
+ )
79
+ end
80
+ end
81
+
82
+ class DGTilingTest < Minitest::Test
83
+ include GeometryAssertions
84
+
85
+ def setup
86
+ @tiler = Tiletanic::TileSchemes::DGTiling.new
87
+ end
88
+
89
+ def test_bounds_and_level_zero_children
90
+ assert_bbox({ xmin: -180.0, ymin: -90.0, xmax: 180.0, ymax: 90.0 }, @tiler.bounds)
91
+ assert_equal Set[
92
+ Tiletanic::Tile.new(x: 0, y: 0, z: 1),
93
+ Tiletanic::Tile.new(x: 1, y: 0, z: 1)
94
+ ], @tiler.children(0, 0, 0).to_set
95
+ end
96
+
97
+ def test_tile_math_matches_python_reference_values
98
+ assert_equal Tiletanic::Tile.new(x: 0, y: 0, z: 0), @tiler.tile(0.0, 0.0, 0)
99
+ assert_equal Tiletanic::Tile.new(x: 3, y: 1, z: 3), @tiler.quadkey_to_tile('013')
100
+ assert_equal Tiletanic::Tile.new(x: 3243, y: 1481, z: 12), @tiler.tile(105.1092, 40.1717, 12)
101
+ assert_equal '013', @tiler.quadkey(3, 1, 3)
102
+ end
103
+
104
+ def test_bbox_helpers
105
+ assert_coords(-180.0, 90.0, @tiler.ul(0, 0, 1))
106
+ assert_coords(180.0, -90.0, @tiler.br(1, 0, 1))
107
+ assert_bbox({ xmin: 0.0, ymin: 0.0, xmax: 45.0, ymax: 45.0 }, @tiler.bbox(4, 2, 3))
108
+ end
109
+ end
110
+
111
+ class WebMercatorBLTest < Minitest::Test
112
+ include GeometryAssertions
113
+
114
+ def setup
115
+ @tiler = Tiletanic::TileSchemes::WebMercatorBL.new
116
+ end
117
+
118
+ def test_quadkeys_flip_the_y_axis
119
+ assert_equal '', @tiler.quadkey(0, 0, 0)
120
+ assert_equal '231', @tiler.quadkey(3, 1, 3)
121
+ assert_equal Tiletanic::Tile.new(x: 0, y: 1, z: 1), @tiler.quadkey_to_tile('0')
122
+ assert_equal Tiletanic::Tile.new(x: 405, y: 327, z: 9), @tiler.quadkey_to_tile('130232101')
123
+ end
124
+
125
+ def test_bbox_helpers
126
+ assert_bbox(
127
+ {
128
+ xmin: -20_037_508.342789244,
129
+ ymin: -20_037_508.342789244,
130
+ xmax: 0.0,
131
+ ymax: 0.0
132
+ },
133
+ @tiler.bbox(0, 0, 1),
134
+ delta: 1e-6
135
+ )
136
+ end
137
+ end
138
+
139
+ class WebMercatorTest < Minitest::Test
140
+ include GeometryAssertions
141
+
142
+ def setup
143
+ @tiler = Tiletanic::TileSchemes::WebMercator.new
144
+ end
145
+
146
+ def test_quadkeys_match_bing_style_reference_values
147
+ assert_equal '000210122', @tiler.quadkey(20, 35, 9)
148
+ assert_equal Tiletanic::Tile.new(x: 405, y: 184, z: 9), @tiler.quadkey_to_tile('130232101')
149
+ end
150
+
151
+ def test_bbox_helpers
152
+ assert_bbox(
153
+ {
154
+ xmin: 13_821_037.70641243,
155
+ ymin: -3_250_713.9389119744,
156
+ xmax: 13_822_260.698864993,
157
+ ymax: -3_249_490.9464594126
158
+ },
159
+ @tiler.bbox(27_685, 19_041, 15),
160
+ delta: 1e-6
161
+ )
162
+ end
163
+ end
164
+
165
+ class UTM10kmTilingTest < Minitest::Test
166
+ include GeometryAssertions
167
+
168
+ def setup
169
+ @tiler = Tiletanic::TileSchemes::UTM10kmTiling.new
170
+ end
171
+
172
+ def test_zoom_and_center_tiles
173
+ assert_equal 11, @tiler.zoom
174
+ (0..18).each do |zoom|
175
+ assert_equal Tiletanic::Tile.new(x: (2**zoom) / 2, y: (2**zoom) / 2, z: zoom), @tiler.tile(500_000, 0, zoom)
176
+ end
177
+ end
178
+
179
+ def test_bbox_helpers
180
+ assert_bbox(
181
+ { xmin: 500_000, ymin: -10_000, xmax: 510_000, ymax: 0 },
182
+ @tiler.bbox((2**11) / 2, (2**11) / 2, 11)
183
+ )
184
+ assert_coords(500_000, 0, @tiler.ul((2**11) / 2, (2**11) / 2, 11))
185
+ end
186
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tiletanic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pete Schmitt
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ffi-geos
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rgeo
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rgeo-geojson
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.2'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.2'
54
+ description: A Ruby port of the DigitalGlobe Tiletanic library for tile schemes, quadkeys,
55
+ and geometry coverings.
56
+ email:
57
+ - pschmitt@gmail.com
58
+ executables:
59
+ - tiletanic
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - LICENSE
64
+ - README.md
65
+ - exe/tiletanic
66
+ - lib/tiletanic.rb
67
+ - lib/tiletanic/base.rb
68
+ - lib/tiletanic/cli.rb
69
+ - lib/tiletanic/geos_bootstrap.rb
70
+ - lib/tiletanic/tile_cover.rb
71
+ - lib/tiletanic/tilecover.rb
72
+ - lib/tiletanic/tileschemes.rb
73
+ - lib/tiletanic/version.rb
74
+ - test/cli_test.rb
75
+ - test/test_helper.rb
76
+ - test/tile_cover_test.rb
77
+ - test/tileschemes_test.rb
78
+ homepage: https://github.com/DigitalGlobe/tiletanic-rb
79
+ licenses:
80
+ - MIT
81
+ metadata:
82
+ source_code_uri: https://github.com/DigitalGlobe/tiletanic-rb
83
+ bug_tracker_uri: https://github.com/DigitalGlobe/tiletanic-rb/issues
84
+ rubygems_mfa_required: 'true'
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '3.1'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 4.0.6
100
+ specification_version: 4
101
+ summary: Geospatial tiling utilities
102
+ test_files: []