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.
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