ffi-geos 1.1.1 → 1.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -5
  3. data/MIT-LICENSE +1 -1
  4. data/lib/ffi-geos.rb +90 -8
  5. data/lib/ffi-geos/buffer_params.rb +8 -7
  6. data/lib/ffi-geos/coordinate_sequence.rb +14 -13
  7. data/lib/ffi-geos/geometry.rb +120 -71
  8. data/lib/ffi-geos/geometry_collection.rb +2 -1
  9. data/lib/ffi-geos/interrupt.rb +2 -0
  10. data/lib/ffi-geos/line_string.rb +5 -4
  11. data/lib/ffi-geos/linear_ring.rb +1 -0
  12. data/lib/ffi-geos/multi_line_string.rb +2 -1
  13. data/lib/ffi-geos/multi_point.rb +1 -0
  14. data/lib/ffi-geos/multi_polygon.rb +1 -0
  15. data/lib/ffi-geos/point.rb +4 -3
  16. data/lib/ffi-geos/polygon.rb +4 -3
  17. data/lib/ffi-geos/prepared_geometry.rb +13 -12
  18. data/lib/ffi-geos/strtree.rb +61 -13
  19. data/lib/ffi-geos/tools.rb +2 -1
  20. data/lib/ffi-geos/utils.rb +12 -11
  21. data/lib/ffi-geos/version.rb +2 -1
  22. data/lib/ffi-geos/wkb_reader.rb +5 -4
  23. data/lib/ffi-geos/wkb_writer.rb +11 -10
  24. data/lib/ffi-geos/wkt_reader.rb +4 -3
  25. data/lib/ffi-geos/wkt_writer.rb +9 -8
  26. data/test/coordinate_sequence_tests.rb +1 -0
  27. data/test/geometry_collection_tests.rb +1 -0
  28. data/test/geometry_tests.rb +88 -0
  29. data/test/interrupt_tests.rb +1 -0
  30. data/test/line_string_tests.rb +1 -0
  31. data/test/linear_ring_tests.rb +1 -0
  32. data/test/misc_tests.rb +99 -0
  33. data/test/multi_line_string_tests.rb +1 -0
  34. data/test/point_tests.rb +1 -0
  35. data/test/polygon_tests.rb +1 -0
  36. data/test/prepared_geometry_tests.rb +1 -0
  37. data/test/strtree_tests.rb +143 -2
  38. data/test/test_helper.rb +8 -2
  39. data/test/tools_tests.rb +1 -0
  40. data/test/utils_tests.rb +1 -0
  41. data/test/wkb_reader_tests.rb +1 -0
  42. data/test/wkb_writer_tests.rb +3 -4
  43. data/test/wkt_reader_tests.rb +1 -0
  44. data/test/wkt_writer_tests.rb +1 -0
  45. metadata +9 -9
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -29,7 +30,7 @@ class STRtreeTests < Minitest::Test
29
30
  @tree.query(read('POINT(5 5)'))
30
31
 
31
32
  assert_raises(Geos::STRtree::AlreadyBuiltError) do
32
- @tree.insert(read('POINT(0 0)'), 'test')
33
+ @tree.insert(read('POINT(0 0)'))
33
34
  end
34
35
  end
35
36
 
@@ -217,5 +218,145 @@ class STRtreeTests < Minitest::Test
217
218
  Geos::STRtree.new([])
218
219
  end
219
220
  end
220
- end
221
221
 
222
+ def test_create_without_capacity
223
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree)
224
+
225
+ Geos::STRtree.new
226
+ end
227
+
228
+ def test_insert
229
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree)
230
+
231
+ tree = Geos::STRtree.new(2)
232
+
233
+ tree.insert(read('POINT (3 3)'), :foo)
234
+ tree.insert(read('POINT (2 7)'))
235
+ end
236
+
237
+ def test_nearest
238
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
239
+
240
+ geom_1 = read('POINT (3 3)')
241
+ geom_2 = read('POINT (2 7)')
242
+ geom_3 = read('POINT (5 4)')
243
+ geom_4 = read('POINT (3 8)')
244
+
245
+ tree = Geos::STRtree.new(2)
246
+ tree.insert(geom_1)
247
+ tree.insert(geom_2)
248
+ tree.insert(geom_3)
249
+
250
+ nearest_geom = tree.nearest(geom_4)
251
+ assert_equal(write(geom_2), write(nearest_geom))
252
+ end
253
+
254
+ def test_nearest_with_depth
255
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
256
+
257
+ number_of_geoms = 100
258
+ geoms = []
259
+ query_points = []
260
+ tree = Geos::STRtree.new(8)
261
+
262
+ number_of_geoms.times do
263
+ geom = Geos.create_point(rand, rand)
264
+ geoms << geom
265
+ tree.insert(geom)
266
+
267
+ query_points << Geos.create_point(rand, rand)
268
+ end
269
+
270
+ query_points.each do |query_point|
271
+ nearest = tree.nearest(query_point)
272
+ nearest_brute_force = nil
273
+ nearest_brute_force_distance = Float::MAX
274
+
275
+ number_of_geoms.times do |j|
276
+ distance = query_point.distance(geoms[j])
277
+
278
+ if nearest_brute_force_distance.nil? || distance < nearest_brute_force_distance
279
+ nearest_brute_force = geoms[j]
280
+ nearest_brute_force_distance = distance
281
+ end
282
+ end
283
+
284
+ assert(nearest.equals?(nearest_brute_force))
285
+ end
286
+ end
287
+
288
+ def test_nearest_with_empty_tree
289
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
290
+
291
+ tree = Geos::STRtree.new(10)
292
+ geom_1 = read('POINT (3 3)')
293
+ nearest_geom = tree.nearest(geom_1)
294
+
295
+ assert_nil(nearest_geom)
296
+ end
297
+
298
+ def test_nearest_with_some_empty_geometries
299
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
300
+
301
+ geom_1 = read('LINESTRING EMPTY')
302
+ geom_2 = read('POINT (2 7)')
303
+ geom_3 = read('POINT (12 97)')
304
+ geom_4 = read('LINESTRING (3 8, 4 8)')
305
+
306
+ tree = Geos::STRtree.new(4)
307
+ tree.insert(geom_1)
308
+ tree.insert(geom_2)
309
+ tree.insert(geom_3)
310
+
311
+ nearest_geom = tree.nearest(geom_4)
312
+
313
+ assert_equal(write(geom_2), write(nearest_geom))
314
+ end
315
+
316
+ def test_nearest_with_only_empty_geometries
317
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
318
+
319
+ geom_1 = read('LINESTRING EMPTY')
320
+ geom_2 = read('POINT (2 7)')
321
+
322
+ tree = Geos::STRtree.new(4)
323
+ tree.insert(geom_1)
324
+
325
+ assert_raises(Geos::GEOSException, %{Geos::GEOSException: Can't compute envelope of item in BoundablePair}) do
326
+ tree.nearest(geom_2)
327
+ end
328
+ end
329
+
330
+ def test_disallowed_inserts_on_nearest
331
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest)
332
+
333
+ setup_tree
334
+
335
+ @tree.nearest(read('POINT(5 5)'))
336
+
337
+ assert_raises(Geos::STRtree::AlreadyBuiltError) do
338
+ @tree.insert(read('POINT(0 0)'))
339
+ end
340
+ end
341
+
342
+ def test_nearest_item
343
+ skip unless ENV['FORCE_TESTS'] || defined?(Geos::STRtree) && Geos::STRtree.method_defined?(:nearest_item)
344
+
345
+ geom_1 = read('POINT (3 3)')
346
+ geom_2 = read('POINT (2 7)')
347
+ geom_3 = read('POINT (5 4)')
348
+ geom_4 = read('POINT (3 8)')
349
+
350
+ item_1 = { :item_1 => :test }
351
+ item_2 = [ :test ]
352
+ item_3 = Object.new
353
+
354
+ tree = Geos::STRtree.new(2)
355
+ tree.insert(geom_1, item_1)
356
+ tree.insert(geom_2, item_2)
357
+ tree.insert(geom_3, item_3)
358
+
359
+ nearest_item = tree.nearest_item(geom_4)
360
+ assert_equal(item_2, nearest_item)
361
+ end
362
+ end
@@ -1,4 +1,5 @@
1
1
  # encoding: BINARY
2
+ # frozen_string_literal: true
2
3
 
3
4
  if RUBY_VERSION >= '1.9'
4
5
  require 'simplecov'
@@ -41,18 +42,23 @@ module TestHelper
41
42
 
42
43
  def self.included(base)
43
44
  base.class_eval do
44
- attr_reader :reader, :writer
45
+ attr_reader :reader, :reader_hex, :writer
45
46
  end
46
47
  end
47
48
 
48
49
  def setup
49
50
  GC.start
50
51
  @reader = Geos::WktReader.new
52
+ @reader_hex = Geos::WkbReader.new
51
53
  @writer = Geos::WktWriter.new
52
54
  end
53
55
 
54
56
  def read(*args)
55
- reader.read(*args)
57
+ if args[0][0] != '0'
58
+ reader.read(*args)
59
+ else
60
+ reader_hex.read_hex(*args)
61
+ end
56
62
  end
57
63
 
58
64
  def write(*args)
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -26,9 +27,7 @@ class WkbWriterTests < Minitest::Test
26
27
  @wkb_writer.write(geom)
27
28
  end
28
29
 
29
- if ''.respond_to?(:force_encoding)
30
- expected.force_encoding('BINARY')
31
- end
30
+ expected = expected.dup.force_encoding('BINARY') if expected.respond_to?(:encode)
32
31
 
33
32
  assert_equal(Geos::Tools.symbol_for_enum(Geos::ByteOrders, byte_order), @wkb_writer.byte_order)
34
33
  assert_equal(dimensions, @wkb_writer.output_dimensions)
@@ -433,7 +432,7 @@ class WkbWriterTests < Minitest::Test
433
432
  geom.srid = 4326
434
433
 
435
434
  tester = lambda { |expected, *args|
436
- expected.force_encoding('BINARY') if expected.respond_to?(:force_encoding)
435
+ expected = expected.dup.force_encoding('BINARY') if expected.respond_to?(:force_encoding)
437
436
 
438
437
  assert_equal(
439
438
  expected,
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  $: << File.dirname(__FILE__)
4
5
  require 'test_helper'
metadata CHANGED
@@ -1,24 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-geos
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.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: 2016-01-31 00:00:00.000000000 Z
11
+ date: 2017-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: ffi
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - ">="
17
18
  - !ruby/object:Gem::Version
18
19
  version: 1.0.0
19
- name: ffi
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
@@ -84,7 +84,7 @@ homepage: http://github.com/dark-panda/ffi-geos
84
84
  licenses:
85
85
  - MIT
86
86
  metadata: {}
87
- post_install_message:
87
+ post_install_message:
88
88
  rdoc_options: []
89
89
  require_paths:
90
90
  - lib
@@ -99,9 +99,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.4.8
104
- signing_key:
102
+ rubyforge_project:
103
+ rubygems_version: 2.6.10
104
+ signing_key:
105
105
  specification_version: 4
106
106
  summary: An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).
107
107
  test_files: