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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +116 -0
- data/exe/tiletanic +8 -0
- data/lib/tiletanic/base.rb +26 -0
- data/lib/tiletanic/cli.rb +277 -0
- data/lib/tiletanic/geos_bootstrap.rb +81 -0
- data/lib/tiletanic/tile_cover.rb +124 -0
- data/lib/tiletanic/tilecover.rb +3 -0
- data/lib/tiletanic/tileschemes.rb +255 -0
- data/lib/tiletanic/version.rb +5 -0
- data/lib/tiletanic.rb +31 -0
- data/test/cli_test.rb +146 -0
- data/test/test_helper.rb +34 -0
- data/test/tile_cover_test.rb +168 -0
- data/test/tileschemes_test.rb +186 -0
- metadata +102 -0
|
@@ -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: []
|