ffi-geos 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: