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.
- checksums.yaml +4 -4
- data/.travis.yml +8 -5
- data/MIT-LICENSE +1 -1
- data/lib/ffi-geos.rb +90 -8
- data/lib/ffi-geos/buffer_params.rb +8 -7
- data/lib/ffi-geos/coordinate_sequence.rb +14 -13
- data/lib/ffi-geos/geometry.rb +120 -71
- data/lib/ffi-geos/geometry_collection.rb +2 -1
- data/lib/ffi-geos/interrupt.rb +2 -0
- data/lib/ffi-geos/line_string.rb +5 -4
- data/lib/ffi-geos/linear_ring.rb +1 -0
- data/lib/ffi-geos/multi_line_string.rb +2 -1
- data/lib/ffi-geos/multi_point.rb +1 -0
- data/lib/ffi-geos/multi_polygon.rb +1 -0
- data/lib/ffi-geos/point.rb +4 -3
- data/lib/ffi-geos/polygon.rb +4 -3
- data/lib/ffi-geos/prepared_geometry.rb +13 -12
- data/lib/ffi-geos/strtree.rb +61 -13
- data/lib/ffi-geos/tools.rb +2 -1
- data/lib/ffi-geos/utils.rb +12 -11
- data/lib/ffi-geos/version.rb +2 -1
- data/lib/ffi-geos/wkb_reader.rb +5 -4
- data/lib/ffi-geos/wkb_writer.rb +11 -10
- data/lib/ffi-geos/wkt_reader.rb +4 -3
- data/lib/ffi-geos/wkt_writer.rb +9 -8
- data/test/coordinate_sequence_tests.rb +1 -0
- data/test/geometry_collection_tests.rb +1 -0
- data/test/geometry_tests.rb +88 -0
- data/test/interrupt_tests.rb +1 -0
- data/test/line_string_tests.rb +1 -0
- data/test/linear_ring_tests.rb +1 -0
- data/test/misc_tests.rb +99 -0
- data/test/multi_line_string_tests.rb +1 -0
- data/test/point_tests.rb +1 -0
- data/test/polygon_tests.rb +1 -0
- data/test/prepared_geometry_tests.rb +1 -0
- data/test/strtree_tests.rb +143 -2
- data/test/test_helper.rb +8 -2
- data/test/tools_tests.rb +1 -0
- data/test/utils_tests.rb +1 -0
- data/test/wkb_reader_tests.rb +1 -0
- data/test/wkb_writer_tests.rb +3 -4
- data/test/wkt_reader_tests.rb +1 -0
- data/test/wkt_writer_tests.rb +1 -0
- metadata +9 -9
data/test/point_tests.rb
CHANGED
data/test/polygon_tests.rb
CHANGED
data/test/strtree_tests.rb
CHANGED
@@ -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)')
|
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
|
data/test/test_helper.rb
CHANGED
@@ -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
|
-
|
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)
|
data/test/tools_tests.rb
CHANGED
data/test/utils_tests.rb
CHANGED
data/test/wkb_reader_tests.rb
CHANGED
data/test/wkb_writer_tests.rb
CHANGED
@@ -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
|
-
|
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,
|
data/test/wkt_reader_tests.rb
CHANGED
data/test/wkt_writer_tests.rb
CHANGED
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.
|
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:
|
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.
|
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:
|