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.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +4851 -0
  3. data/.travis.yml +24 -9
  4. data/FUNDING.yml +2 -0
  5. data/Gemfile +12 -16
  6. data/Guardfile +6 -8
  7. data/MIT-LICENSE +1 -1
  8. data/README.rdoc +2 -20
  9. data/Rakefile +4 -2
  10. data/ffi-geos.gemspec +13 -14
  11. data/lib/ffi-geos.rb +342 -244
  12. data/lib/ffi-geos/buffer_params.rb +9 -20
  13. data/lib/ffi-geos/coordinate_sequence.rb +351 -65
  14. data/lib/ffi-geos/geometry.rb +267 -191
  15. data/lib/ffi-geos/geometry_collection.rb +74 -12
  16. data/lib/ffi-geos/interrupt.rb +11 -16
  17. data/lib/ffi-geos/line_string.rb +157 -33
  18. data/lib/ffi-geos/linear_ring.rb +2 -3
  19. data/lib/ffi-geos/multi_line_string.rb +1 -2
  20. data/lib/ffi-geos/multi_point.rb +0 -1
  21. data/lib/ffi-geos/multi_polygon.rb +0 -1
  22. data/lib/ffi-geos/point.rb +70 -15
  23. data/lib/ffi-geos/polygon.rb +124 -21
  24. data/lib/ffi-geos/prepared_geometry.rb +11 -12
  25. data/lib/ffi-geos/strtree.rb +64 -77
  26. data/lib/ffi-geos/tools.rb +16 -19
  27. data/lib/ffi-geos/utils.rb +36 -60
  28. data/lib/ffi-geos/version.rb +1 -3
  29. data/lib/ffi-geos/wkb_reader.rb +4 -9
  30. data/lib/ffi-geos/wkb_writer.rb +15 -20
  31. data/lib/ffi-geos/wkt_reader.rb +2 -5
  32. data/lib/ffi-geos/wkt_writer.rb +20 -31
  33. data/sonar-project.properties +16 -0
  34. data/test/.rubocop.yml +36 -0
  35. data/test/coordinate_sequence_tests.rb +322 -52
  36. data/test/geometry_collection_tests.rb +388 -4
  37. data/test/geometry_tests.rb +466 -121
  38. data/test/interrupt_tests.rb +9 -12
  39. data/test/line_string_tests.rb +213 -25
  40. data/test/linear_ring_tests.rb +1 -3
  41. data/test/misc_tests.rb +28 -30
  42. data/test/multi_line_string_tests.rb +0 -2
  43. data/test/point_tests.rb +158 -2
  44. data/test/polygon_tests.rb +283 -2
  45. data/test/prepared_geometry_tests.rb +8 -11
  46. data/test/strtree_tests.rb +14 -15
  47. data/test/test_helper.rb +75 -51
  48. data/test/tools_tests.rb +1 -4
  49. data/test/utils_tests.rb +85 -76
  50. data/test/wkb_reader_tests.rb +18 -18
  51. data/test/wkb_writer_tests.rb +15 -22
  52. data/test/wkt_reader_tests.rb +1 -4
  53. data/test/wkt_writer_tests.rb +8 -17
  54. metadata +11 -7
@@ -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
- "\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40",
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
- "\x00\x00\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
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
- "\x01\x01\x00\x00\x20\x2B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40",
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
- "\x00\x20\x00\x00\x01\x00\x00\x00\x2B\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
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
- "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
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
- "\x00\x80\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
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
- "\x00\xA0\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
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("\x01\x01\x00\x00\x20\x2B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40").srid)
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("\x01\x01\x00\x00\x20\x2B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40", {
197
- :srid => 4326
198
- }).srid)
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('01010000202B00000000000000000018400000000000001C40', {
207
- :srid => 4326
208
- }).srid)
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("FOO")
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("FOO")
219
+ @wkb_reader.read_hex('FOO')
220
220
  end
221
221
  end
222
222
  end
@@ -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
- "\x00\x00\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
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
- "\x00\x20\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00",
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
- "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
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
- "\x00\x80\x00\x00\x01\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
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
- "\x00\xA0\x00\x00\x01\x00\x00\x00\x35\x40\x18\x00\x00\x00\x00\x00\x00\x40\x1C\x00\x00\x00\x00\x00\x00\x40\x20\x00\x00\x00\x00\x00\x00",
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
- "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
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
- "\x01\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x1C\x40\x00\x00\x00\x00\x00\x00\x20\x40",
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
- "\x01\x01\x00\x00\x20\xE6\x10\x00\x00\x00\x00\x00\x00\x00\x00\xF0\x3F\x00\x00\x00\x00\x00\x00\x00\x40", {
445
- :include_srid => true
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
- "\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0\x3F\x00\x00\x00\x00\x00\x00\x00\x40"
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', @wkb_writer.write_hex(geom, {
461
- :include_srid => true
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
@@ -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)', :srid => 4326).srid)
122
+ assert_equal(4326, read('POINT (0 0)', srid: 4326).srid)
126
123
  end
127
124
  end
@@ -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
- :trim => true
123
- }))
124
-
125
- assert_equal('POINT (1.0000 2.0000)', write(geom, {
126
- :rounding_precision => 4
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: 1.2.0
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: 2017-02-21 00:00:00.000000000 Z
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
- rubyforge_project:
103
- rubygems_version: 2.6.10
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