ffi-geos 1.2.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|