ffi-geos 1.2.0 → 2.2.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 +5 -5
- data/.rubocop.yml +4851 -0
- data/.travis.yml +24 -9
- data/FUNDING.yml +2 -0
- data/Gemfile +12 -16
- data/Guardfile +6 -8
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -20
- data/Rakefile +4 -2
- data/ffi-geos.gemspec +13 -14
- data/lib/ffi-geos.rb +342 -244
- data/lib/ffi-geos/buffer_params.rb +9 -20
- data/lib/ffi-geos/coordinate_sequence.rb +351 -65
- data/lib/ffi-geos/geometry.rb +267 -191
- data/lib/ffi-geos/geometry_collection.rb +74 -12
- data/lib/ffi-geos/interrupt.rb +11 -16
- data/lib/ffi-geos/line_string.rb +157 -33
- data/lib/ffi-geos/linear_ring.rb +2 -3
- data/lib/ffi-geos/multi_line_string.rb +1 -2
- data/lib/ffi-geos/multi_point.rb +0 -1
- data/lib/ffi-geos/multi_polygon.rb +0 -1
- data/lib/ffi-geos/point.rb +70 -15
- data/lib/ffi-geos/polygon.rb +124 -21
- data/lib/ffi-geos/prepared_geometry.rb +11 -12
- data/lib/ffi-geos/strtree.rb +64 -77
- data/lib/ffi-geos/tools.rb +16 -19
- data/lib/ffi-geos/utils.rb +36 -60
- data/lib/ffi-geos/version.rb +1 -3
- data/lib/ffi-geos/wkb_reader.rb +4 -9
- data/lib/ffi-geos/wkb_writer.rb +15 -20
- data/lib/ffi-geos/wkt_reader.rb +2 -5
- data/lib/ffi-geos/wkt_writer.rb +20 -31
- data/sonar-project.properties +16 -0
- data/test/.rubocop.yml +36 -0
- data/test/coordinate_sequence_tests.rb +322 -52
- data/test/geometry_collection_tests.rb +388 -4
- data/test/geometry_tests.rb +466 -121
- data/test/interrupt_tests.rb +9 -12
- data/test/line_string_tests.rb +213 -25
- data/test/linear_ring_tests.rb +1 -3
- data/test/misc_tests.rb +28 -30
- data/test/multi_line_string_tests.rb +0 -2
- data/test/point_tests.rb +158 -2
- data/test/polygon_tests.rb +283 -2
- data/test/prepared_geometry_tests.rb +8 -11
- data/test/strtree_tests.rb +14 -15
- data/test/test_helper.rb +75 -51
- data/test/tools_tests.rb +1 -4
- data/test/utils_tests.rb +85 -76
- data/test/wkb_reader_tests.rb +18 -18
- data/test/wkb_writer_tests.rb +15 -22
- data/test/wkt_reader_tests.rb +1 -4
- data/test/wkt_writer_tests.rb +8 -17
- metadata +11 -7
data/test/wkb_reader_tests.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
$: << File.dirname(__FILE__)
|
5
3
|
require 'test_helper'
|
6
4
|
|
7
5
|
class WkbReaderTests < Minitest::Test
|
@@ -107,7 +105,7 @@ class WkbReaderTests < Minitest::Test
|
|
107
105
|
def test_2d_little_endian_binary
|
108
106
|
wkb_tester(
|
109
107
|
'POINT(6 7)',
|
110
|
-
|
108
|
+
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64].pack('C*'),
|
111
109
|
Geos::GEOS_POINT,
|
112
110
|
'Point',
|
113
111
|
Geos::Point,
|
@@ -119,7 +117,7 @@ class WkbReaderTests < Minitest::Test
|
|
119
117
|
def test_2d_big_endian_binary
|
120
118
|
wkb_tester(
|
121
119
|
'POINT (6 7)',
|
122
|
-
|
120
|
+
[0, 0, 0, 0, 1, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0].pack('C*'),
|
123
121
|
Geos::GEOS_POINT,
|
124
122
|
'Point',
|
125
123
|
Geos::Point,
|
@@ -131,7 +129,7 @@ class WkbReaderTests < Minitest::Test
|
|
131
129
|
def test_2d_little_endian_srid_binary
|
132
130
|
wkb_tester(
|
133
131
|
'POINT (6 7)',
|
134
|
-
|
132
|
+
[1, 1, 0, 0, 32, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64].pack('C*'),
|
135
133
|
Geos::GEOS_POINT,
|
136
134
|
'Point',
|
137
135
|
Geos::Point,
|
@@ -143,7 +141,7 @@ class WkbReaderTests < Minitest::Test
|
|
143
141
|
def test_2d_big_endian_srid_binary
|
144
142
|
wkb_tester(
|
145
143
|
'POINT (6 7)',
|
146
|
-
|
144
|
+
[0, 32, 0, 0, 1, 0, 0, 0, 43, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0].pack('C*'),
|
147
145
|
Geos::GEOS_POINT,
|
148
146
|
'Point',
|
149
147
|
Geos::Point,
|
@@ -155,7 +153,7 @@ class WkbReaderTests < Minitest::Test
|
|
155
153
|
def test_3d_little_endian_binary
|
156
154
|
wkb_tester(
|
157
155
|
'POINT Z (6 7 8)',
|
158
|
-
|
156
|
+
[1, 1, 0, 0, 128, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 0, 32, 64].pack('C*'),
|
159
157
|
Geos::GEOS_POINT,
|
160
158
|
'Point',
|
161
159
|
Geos::Point,
|
@@ -167,7 +165,7 @@ class WkbReaderTests < Minitest::Test
|
|
167
165
|
def test_3d_big_endian_binary
|
168
166
|
wkb_tester(
|
169
167
|
'POINT Z (6 7 8)',
|
170
|
-
|
168
|
+
[0, 128, 0, 0, 1, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0].pack('C*'),
|
171
169
|
Geos::GEOS_POINT,
|
172
170
|
'Point',
|
173
171
|
Geos::Point,
|
@@ -179,7 +177,7 @@ class WkbReaderTests < Minitest::Test
|
|
179
177
|
def test_3d_big_endian_srid_binary
|
180
178
|
wkb_tester(
|
181
179
|
'POINT Z (6 7 8)',
|
182
|
-
|
180
|
+
[0, 160, 0, 0, 1, 0, 0, 0, 53, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0].pack('C*'),
|
183
181
|
Geos::GEOS_POINT,
|
184
182
|
'Point',
|
185
183
|
Geos::Point,
|
@@ -190,12 +188,13 @@ class WkbReaderTests < Minitest::Test
|
|
190
188
|
|
191
189
|
def test_read_with_srid
|
192
190
|
assert_equal(43,
|
193
|
-
@wkb_reader.read(
|
191
|
+
@wkb_reader.read([1, 1, 0, 0, 32, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64].pack('C*')).srid)
|
194
192
|
|
195
193
|
assert_equal(4326,
|
196
|
-
@wkb_reader.read(
|
197
|
-
|
198
|
-
|
194
|
+
@wkb_reader.read(
|
195
|
+
[1, 1, 0, 0, 32, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64].pack('C*'),
|
196
|
+
srid: 4326
|
197
|
+
).srid)
|
199
198
|
end
|
200
199
|
|
201
200
|
def test_read_hex_srid
|
@@ -203,20 +202,21 @@ class WkbReaderTests < Minitest::Test
|
|
203
202
|
@wkb_reader.read_hex('01010000202B00000000000000000018400000000000001C40').srid)
|
204
203
|
|
205
204
|
assert_equal(4326,
|
206
|
-
@wkb_reader.read_hex(
|
207
|
-
|
208
|
-
|
205
|
+
@wkb_reader.read_hex(
|
206
|
+
'01010000202B00000000000000000018400000000000001C40',
|
207
|
+
srid: 4326
|
208
|
+
).srid)
|
209
209
|
end
|
210
210
|
|
211
211
|
def test_read_parse_error
|
212
212
|
assert_raises(Geos::WkbReader::ParseError) do
|
213
|
-
@wkb_reader.read(
|
213
|
+
@wkb_reader.read('FOO')
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
217
217
|
def test_read_hex_parse_error
|
218
218
|
assert_raises(Geos::WkbReader::ParseError) do
|
219
|
-
@wkb_reader.read_hex(
|
219
|
+
@wkb_reader.read_hex('FOO')
|
220
220
|
end
|
221
221
|
end
|
222
222
|
end
|
data/test/wkb_writer_tests.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
$: << File.dirname(__FILE__)
|
5
3
|
require 'test_helper'
|
6
4
|
|
7
5
|
class WkbWriterTests < Minitest::Test
|
@@ -122,8 +120,6 @@ class WkbWriterTests < Minitest::Test
|
|
122
120
|
)
|
123
121
|
end
|
124
122
|
|
125
|
-
|
126
|
-
|
127
123
|
def test_2d_little_endian_with_3d_input
|
128
124
|
wkb_tester(
|
129
125
|
'010100000000000000000018400000000000001C40',
|
@@ -146,8 +142,6 @@ class WkbWriterTests < Minitest::Test
|
|
146
142
|
)
|
147
143
|
end
|
148
144
|
|
149
|
-
|
150
|
-
|
151
145
|
def test_2d_big_endian_with_3d_input
|
152
146
|
wkb_tester(
|
153
147
|
'00000000014018000000000000401C000000000000',
|
@@ -315,8 +309,6 @@ class WkbWriterTests < Minitest::Test
|
|
315
309
|
)
|
316
310
|
end
|
317
311
|
|
318
|
-
|
319
|
-
|
320
312
|
def test_2d_little_endian_with_3d_input_binary
|
321
313
|
wkb_tester(
|
322
314
|
'010100000000000000000018400000000000001C40',
|
@@ -341,7 +333,7 @@ class WkbWriterTests < Minitest::Test
|
|
341
333
|
|
342
334
|
def test_2d_big_endian_with_3d_input_binary
|
343
335
|
wkb_tester(
|
344
|
-
|
336
|
+
[0, 0, 0, 0, 1, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0].pack('C*'),
|
345
337
|
'POINT(6 7 8)',
|
346
338
|
2,
|
347
339
|
0,
|
@@ -353,7 +345,7 @@ class WkbWriterTests < Minitest::Test
|
|
353
345
|
|
354
346
|
def test_2d_big_endian_with_3d_input_with_srid_binary
|
355
347
|
wkb_tester(
|
356
|
-
|
348
|
+
[0, 32, 0, 0, 1, 0, 0, 0, 53, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0].pack('C*'),
|
357
349
|
'POINT(6 7 8)',
|
358
350
|
2,
|
359
351
|
0,
|
@@ -365,7 +357,7 @@ class WkbWriterTests < Minitest::Test
|
|
365
357
|
|
366
358
|
def test_3d_little_endian_with_3d_input_binary
|
367
359
|
wkb_tester(
|
368
|
-
|
360
|
+
[1, 1, 0, 0, 128, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 0, 32, 64].pack('C*'),
|
369
361
|
'POINT(6 7 8)',
|
370
362
|
3,
|
371
363
|
1,
|
@@ -377,7 +369,7 @@ class WkbWriterTests < Minitest::Test
|
|
377
369
|
|
378
370
|
def test_3d_big_endian_with_3d_input_binary
|
379
371
|
wkb_tester(
|
380
|
-
|
372
|
+
[0, 128, 0, 0, 1, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0].pack('C*'),
|
381
373
|
'POINT(6 7 8)',
|
382
374
|
3,
|
383
375
|
0,
|
@@ -389,7 +381,7 @@ class WkbWriterTests < Minitest::Test
|
|
389
381
|
|
390
382
|
def test_3d_big_endian_with_3d_input_with_srid_binary
|
391
383
|
wkb_tester(
|
392
|
-
|
384
|
+
[0, 160, 0, 0, 1, 0, 0, 0, 53, 64, 24, 0, 0, 0, 0, 0, 0, 64, 28, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0].pack('C*'),
|
393
385
|
'POINT(6 7 8)',
|
394
386
|
3,
|
395
387
|
0,
|
@@ -402,7 +394,7 @@ class WkbWriterTests < Minitest::Test
|
|
402
394
|
def test_try_bad_byte_order_value_binary
|
403
395
|
assert_raises(TypeError) do
|
404
396
|
wkb_tester(
|
405
|
-
|
397
|
+
[1, 1, 0, 0, 128, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 0, 32, 64].pack('C*'),
|
406
398
|
'POINT(6 7 8)',
|
407
399
|
3,
|
408
400
|
'gibberish',
|
@@ -414,7 +406,7 @@ class WkbWriterTests < Minitest::Test
|
|
414
406
|
|
415
407
|
assert_raises(TypeError) do
|
416
408
|
wkb_tester(
|
417
|
-
|
409
|
+
[1, 1, 0, 0, 128, 0, 0, 0, 0, 0, 0, 24, 64, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 0, 32, 64].pack('C*'),
|
418
410
|
'POINT(6 7 8)',
|
419
411
|
3,
|
420
412
|
1000,
|
@@ -441,13 +433,12 @@ class WkbWriterTests < Minitest::Test
|
|
441
433
|
}
|
442
434
|
|
443
435
|
tester[
|
444
|
-
|
445
|
-
|
446
|
-
}
|
436
|
+
[1, 1, 0, 0, 32, 230, 16, 0, 0, 0, 0, 0, 0, 0, 0, 240, 63, 0, 0, 0, 0, 0, 0, 0, 64].pack('C*'),
|
437
|
+
include_srid: true
|
447
438
|
]
|
448
439
|
|
449
440
|
tester[
|
450
|
-
|
441
|
+
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 63, 0, 0, 0, 0, 0, 0, 0, 64].pack('C*')
|
451
442
|
]
|
452
443
|
end
|
453
444
|
|
@@ -457,9 +448,11 @@ class WkbWriterTests < Minitest::Test
|
|
457
448
|
geom = read('POINT(1 2 3)')
|
458
449
|
geom.srid = 4326
|
459
450
|
|
460
|
-
assert_equal('0101000020E6100000000000000000F03F0000000000000040',
|
461
|
-
|
462
|
-
|
451
|
+
assert_equal('0101000020E6100000000000000000F03F0000000000000040',
|
452
|
+
@wkb_writer.write_hex(
|
453
|
+
geom,
|
454
|
+
include_srid: true
|
455
|
+
))
|
463
456
|
|
464
457
|
assert_equal('0101000000000000000000F03F0000000000000040', @wkb_writer.write_hex(geom))
|
465
458
|
end
|
data/test/wkt_reader_tests.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
$: << File.dirname(__FILE__)
|
5
3
|
require 'test_helper'
|
6
4
|
|
7
5
|
class WktReaderTests < Minitest::Test
|
@@ -22,7 +20,6 @@ class WktReaderTests < Minitest::Test
|
|
22
20
|
Geos::GEOS_POINT,
|
23
21
|
'Point',
|
24
22
|
Geos::Point,
|
25
|
-
|
26
23
|
'POINT(0 0)',
|
27
24
|
'POINT(0 0 0)',
|
28
25
|
'POINT Z(0 0 0)',
|
@@ -122,6 +119,6 @@ class WktReaderTests < Minitest::Test
|
|
122
119
|
|
123
120
|
def test_read_with_srid
|
124
121
|
assert_equal(0, read('POINT (0 0)').srid)
|
125
|
-
assert_equal(4326, read('POINT (0 0)', :
|
122
|
+
assert_equal(4326, read('POINT (0 0)', srid: 4326).srid)
|
126
123
|
end
|
127
124
|
end
|
data/test/wkt_writer_tests.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
$: << File.dirname(__FILE__)
|
5
3
|
require 'test_helper'
|
6
4
|
|
7
5
|
class WktWriterTests < Minitest::Test
|
@@ -11,9 +9,7 @@ class WktWriterTests < Minitest::Test
|
|
11
9
|
geom = read('POINT(12.3456789 98.7654321)')
|
12
10
|
wkt = write(geom)
|
13
11
|
|
14
|
-
x, y = if wkt =~ /^POINT\s\((\d+\.\d+)\s*(\d+\.\d+)\)$/
|
15
|
-
[ $1.to_f, $2.to_f ]
|
16
|
-
end
|
12
|
+
x, y = ([Regexp.last_match[1].to_f, Regexp.last_match[2].to_f] if wkt =~ /^POINT\s\((\d+\.\d+)\s*(\d+\.\d+)\)$/)
|
17
13
|
|
18
14
|
assert_in_delta(12.3456789, x, TOLERANCE)
|
19
15
|
assert_in_delta(98.7654321, y, TOLERANCE)
|
@@ -118,18 +114,13 @@ class WktWriterTests < Minitest::Test
|
|
118
114
|
@writer.rounding_precision = 2
|
119
115
|
|
120
116
|
geom = read('POINT(1 2 3)')
|
121
|
-
assert_equal('POINT (1 2)', write(geom,
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
assert_equal('POINT (1
|
126
|
-
:
|
127
|
-
|
128
|
-
|
129
|
-
assert_equal('POINT Z (1 2 3)', write(geom, {
|
130
|
-
:output_dimensions => 3,
|
131
|
-
:trim => true
|
132
|
-
}))
|
117
|
+
assert_equal('POINT (1 2)', write(geom, trim: true))
|
118
|
+
|
119
|
+
assert_equal('POINT (1.0000 2.0000)', write(geom, rounding_precision: 4))
|
120
|
+
|
121
|
+
assert_equal('POINT Z (1 2 3)', write(geom,
|
122
|
+
output_dimensions: 3,
|
123
|
+
trim: true))
|
133
124
|
|
134
125
|
assert_equal('POINT (1.00 2.00)', write(geom))
|
135
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-geos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J Smith
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -32,7 +32,9 @@ extra_rdoc_files:
|
|
32
32
|
- README.rdoc
|
33
33
|
files:
|
34
34
|
- ".gitignore"
|
35
|
+
- ".rubocop.yml"
|
35
36
|
- ".travis.yml"
|
37
|
+
- FUNDING.yml
|
36
38
|
- Gemfile
|
37
39
|
- Guardfile
|
38
40
|
- MIT-LICENSE
|
@@ -61,6 +63,8 @@ files:
|
|
61
63
|
- lib/ffi-geos/wkb_writer.rb
|
62
64
|
- lib/ffi-geos/wkt_reader.rb
|
63
65
|
- lib/ffi-geos/wkt_writer.rb
|
66
|
+
- sonar-project.properties
|
67
|
+
- test/.rubocop.yml
|
64
68
|
- test/coordinate_sequence_tests.rb
|
65
69
|
- test/geometry_collection_tests.rb
|
66
70
|
- test/geometry_tests.rb
|
@@ -84,7 +88,7 @@ homepage: http://github.com/dark-panda/ffi-geos
|
|
84
88
|
licenses:
|
85
89
|
- MIT
|
86
90
|
metadata: {}
|
87
|
-
post_install_message:
|
91
|
+
post_install_message:
|
88
92
|
rdoc_options: []
|
89
93
|
require_paths:
|
90
94
|
- lib
|
@@ -99,12 +103,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
103
|
- !ruby/object:Gem::Version
|
100
104
|
version: '0'
|
101
105
|
requirements: []
|
102
|
-
|
103
|
-
|
104
|
-
signing_key:
|
106
|
+
rubygems_version: 3.2.16
|
107
|
+
signing_key:
|
105
108
|
specification_version: 4
|
106
109
|
summary: An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).
|
107
110
|
test_files:
|
111
|
+
- test/.rubocop.yml
|
108
112
|
- test/coordinate_sequence_tests.rb
|
109
113
|
- test/geometry_collection_tests.rb
|
110
114
|
- test/geometry_tests.rb
|