ffi-geos 1.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +49 -0
- data/.rubocop.yml +5117 -4
- data/FUNDING.yml +2 -0
- data/Gemfile +9 -16
- data/Guardfile +3 -4
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -20
- data/Rakefile +3 -2
- data/ffi-geos.gemspec +7 -2
- data/lib/ffi-geos/buffer_params.rb +1 -1
- data/lib/ffi-geos/coordinate_sequence.rb +179 -177
- data/lib/ffi-geos/geometry.rb +118 -31
- data/lib/ffi-geos/geometry_collection.rb +26 -12
- data/lib/ffi-geos/interrupt.rb +11 -14
- data/lib/ffi-geos/line_string.rb +64 -49
- data/lib/ffi-geos/multi_line_string.rb +1 -1
- data/lib/ffi-geos/point.rb +18 -18
- data/lib/ffi-geos/polygon.rb +44 -30
- data/lib/ffi-geos/prepared_geometry.rb +1 -1
- data/lib/ffi-geos/strtree.rb +28 -30
- data/lib/ffi-geos/tools.rb +1 -1
- data/lib/ffi-geos/utils.rb +16 -23
- data/lib/ffi-geos/version.rb +1 -1
- data/lib/ffi-geos/wkb_reader.rb +1 -1
- data/lib/ffi-geos/wkb_writer.rb +4 -5
- data/lib/ffi-geos/wkt_reader.rb +1 -1
- data/lib/ffi-geos/wkt_writer.rb +7 -13
- data/lib/ffi-geos.rb +134 -48
- data/sonar-project.properties +16 -0
- data/test/coordinate_sequence_tests.rb +148 -126
- data/test/geometry_collection_tests.rb +41 -67
- data/test/geometry_tests.rb +341 -40
- data/test/interrupt_tests.rb +7 -7
- data/test/line_string_tests.rb +23 -15
- data/test/point_tests.rb +5 -5
- data/test/polygon_tests.rb +6 -7
- data/test/prepared_geometry_tests.rb +8 -8
- data/test/strtree_tests.rb +13 -12
- data/test/test_helper.rb +74 -56
- data/test/utils_tests.rb +69 -59
- data/test/wkb_reader_tests.rb +9 -9
- data/test/wkb_writer_tests.rb +14 -12
- data/test/wkt_reader_tests.rb +0 -1
- data/test/wkt_writer_tests.rb +2 -5
- metadata +12 -10
- data/.travis.yml +0 -21
data/lib/ffi-geos.rb
CHANGED
@@ -50,38 +50,36 @@ module Geos
|
|
50
50
|
|
51
51
|
module FFIGeos
|
52
52
|
def self.search_paths
|
53
|
-
@search_paths ||=
|
53
|
+
@search_paths ||= \
|
54
54
|
if ENV['GEOS_LIBRARY_PATH']
|
55
|
-
[
|
55
|
+
[ENV['GEOS_LIBRARY_PATH']]
|
56
56
|
elsif FFI::Platform::IS_WINDOWS
|
57
57
|
ENV['PATH'].split(File::PATH_SEPARATOR)
|
58
58
|
else
|
59
|
-
[
|
59
|
+
['/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386,aarch64}-linux-gnu']
|
60
60
|
end
|
61
|
-
end
|
62
61
|
end
|
63
62
|
|
64
63
|
def self.find_lib(lib)
|
65
64
|
if ENV['GEOS_LIBRARY_PATH'] && File.file?(ENV['GEOS_LIBRARY_PATH'])
|
66
65
|
ENV['GEOS_LIBRARY_PATH']
|
67
66
|
else
|
68
|
-
Dir.glob(search_paths.map
|
67
|
+
Dir.glob(search_paths.map do |path|
|
69
68
|
File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}{,.?}"))
|
70
|
-
|
69
|
+
end).first
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
73
|
def self.geos_library_path
|
75
|
-
@geos_library_path ||=
|
74
|
+
@geos_library_path ||= \
|
76
75
|
# On MingW the libraries have version numbers
|
77
76
|
find_lib('{lib,}geos_c{,-?}')
|
78
|
-
end
|
79
77
|
end
|
80
78
|
|
81
79
|
# For backwards compatibility with older ffi-geos versions where this
|
82
80
|
# used to return an Array.
|
83
81
|
def self.geos_library_paths
|
84
|
-
[
|
82
|
+
[geos_library_path]
|
85
83
|
end
|
86
84
|
|
87
85
|
extend ::FFI::Library
|
@@ -150,10 +148,10 @@ module Geos
|
|
150
148
|
:pointer,
|
151
149
|
|
152
150
|
# notice callback
|
153
|
-
callback([
|
151
|
+
callback([:string, :string], :void),
|
154
152
|
|
155
153
|
# error callback
|
156
|
-
callback([
|
154
|
+
callback([:string, :string], :void)
|
157
155
|
],
|
158
156
|
|
159
157
|
finishGEOS_r: [
|
@@ -163,16 +161,16 @@ module Geos
|
|
163
161
|
# / deprecated in GEOS 3.5.0+
|
164
162
|
|
165
163
|
# GEOS 3.5.0+
|
166
|
-
GEOS_init_r: [
|
164
|
+
GEOS_init_r: [:pointer],
|
167
165
|
|
168
166
|
GEOSContext_setNoticeMessageHandler_r: [
|
169
167
|
# void, *handle, callback, *void
|
170
|
-
:void, :pointer, callback([
|
168
|
+
:void, :pointer, callback([:string, :string], :void), :pointer
|
171
169
|
],
|
172
170
|
|
173
171
|
GEOSContext_setErrorMessageHandler_r: [
|
174
172
|
# void, *handle, callback, *void
|
175
|
-
:void, :pointer, callback([
|
173
|
+
:void, :pointer, callback([:string, :string], :void), :pointer
|
176
174
|
],
|
177
175
|
|
178
176
|
GEOS_finish_r: [
|
@@ -207,6 +205,21 @@ module Geos
|
|
207
205
|
:pointer, :pointer, :pointer, :uint
|
208
206
|
],
|
209
207
|
|
208
|
+
GEOSPolygonize_valid_r: [
|
209
|
+
# *geom, *handle, **geoms, ngeoms
|
210
|
+
:pointer, :pointer, :pointer, :uint
|
211
|
+
],
|
212
|
+
|
213
|
+
GEOSBuildArea_r: [
|
214
|
+
# *geom, *handle, *geom
|
215
|
+
:pointer, :pointer, :pointer
|
216
|
+
],
|
217
|
+
|
218
|
+
GEOSMakeValid_r: [
|
219
|
+
# *geom, *handle, *geom
|
220
|
+
:pointer, :pointer, :pointer
|
221
|
+
],
|
222
|
+
|
210
223
|
GEOSPolygonizer_getCutEdges_r: [
|
211
224
|
# *geom, *handle, **geoms, ngeoms
|
212
225
|
:pointer, :pointer, :pointer, :uint
|
@@ -328,6 +341,11 @@ module Geos
|
|
328
341
|
# 0 on exception, *handle, *coord_seq, (uint *) size
|
329
342
|
:int, :pointer, :pointer, :pointer
|
330
343
|
],
|
344
|
+
|
345
|
+
GEOSCoordSeq_isCCW_r: [
|
346
|
+
# 0 on exception, *handle, *coord_seq, (char *) value
|
347
|
+
:int, :pointer, :pointer, :pointer
|
348
|
+
],
|
331
349
|
#### /CoordinateSequence functions ####
|
332
350
|
|
333
351
|
#### Geometry functions ####
|
@@ -386,6 +404,11 @@ module Geos
|
|
386
404
|
:pointer, :pointer, :pointer, :pointer
|
387
405
|
],
|
388
406
|
|
407
|
+
GEOSIntersectionPrec_r: [
|
408
|
+
# *geom, *handle, *geom_a, *geom_b, precision
|
409
|
+
:pointer, :pointer, :pointer, :pointer, :double
|
410
|
+
],
|
411
|
+
|
389
412
|
GEOSBufferWithParams_r: [
|
390
413
|
# *geom, *handle, *geom, *params, width
|
391
414
|
:pointer, :pointer, :pointer, :pointer, :double
|
@@ -422,11 +445,21 @@ module Geos
|
|
422
445
|
:pointer, :pointer, :pointer, :pointer
|
423
446
|
],
|
424
447
|
|
448
|
+
GEOSDifferencePrec_r: [
|
449
|
+
# *geom, *handle, *geom_a, *geom_b, precision
|
450
|
+
:pointer, :pointer, :pointer, :pointer, :double
|
451
|
+
],
|
452
|
+
|
425
453
|
GEOSSymDifference_r: [
|
426
454
|
# *geom, *handle, *geom_a, *geom_b
|
427
455
|
:pointer, :pointer, :pointer, :pointer
|
428
456
|
],
|
429
457
|
|
458
|
+
GEOSSymDifferencePrec_r: [
|
459
|
+
# *geom, *handle, *geom_a, *geom_b, precision
|
460
|
+
:pointer, :pointer, :pointer, :pointer, :double
|
461
|
+
],
|
462
|
+
|
430
463
|
GEOSBoundary_r: [
|
431
464
|
# *geom, *handle, *geom
|
432
465
|
:pointer, :pointer, :pointer
|
@@ -437,11 +470,26 @@ module Geos
|
|
437
470
|
:pointer, :pointer, :pointer, :pointer
|
438
471
|
],
|
439
472
|
|
473
|
+
GEOSUnionPrec_r: [
|
474
|
+
# *geom, *handle, *geom_a, *geom_b, precision
|
475
|
+
:pointer, :pointer, :pointer, :pointer, :double
|
476
|
+
],
|
477
|
+
|
478
|
+
GEOSCoverageUnion_r: [
|
479
|
+
# *geom, *handle, *geom
|
480
|
+
:pointer, :pointer, :pointer
|
481
|
+
],
|
482
|
+
|
440
483
|
GEOSUnaryUnion_r: [
|
441
484
|
# *geom, *handle, *geom
|
442
485
|
:pointer, :pointer, :pointer
|
443
486
|
],
|
444
487
|
|
488
|
+
GEOSUnaryUnionPrec_r: [
|
489
|
+
# *geom, *handle, *geom, precision
|
490
|
+
:pointer, :pointer, :pointer, :double
|
491
|
+
],
|
492
|
+
|
445
493
|
GEOSNode_r: [
|
446
494
|
# *geom, *handle, *geom
|
447
495
|
:pointer, :pointer, :pointer
|
@@ -468,6 +516,11 @@ module Geos
|
|
468
516
|
:pointer, :pointer, :pointer
|
469
517
|
],
|
470
518
|
|
519
|
+
GEOSMinimumBoundingCircle_r: [
|
520
|
+
# *geom, *handle, *geom, *double radius, **geom center
|
521
|
+
:pointer, :pointer, :pointer, :pointer, :pointer
|
522
|
+
],
|
523
|
+
|
471
524
|
GEOSEnvelope_r: [
|
472
525
|
# *geom, *handle, *geom
|
473
526
|
:pointer, :pointer, :pointer
|
@@ -478,6 +531,26 @@ module Geos
|
|
478
531
|
:pointer, :pointer, :pointer
|
479
532
|
],
|
480
533
|
|
534
|
+
GEOSGeom_getXMin_r: [
|
535
|
+
# 0 on exception, *handle, (double *) value
|
536
|
+
:int, :pointer, :pointer, :pointer
|
537
|
+
],
|
538
|
+
|
539
|
+
GEOSGeom_getXMax_r: [
|
540
|
+
# 0 on exception, *handle, (double *) value
|
541
|
+
:int, :pointer, :pointer, :pointer
|
542
|
+
],
|
543
|
+
|
544
|
+
GEOSGeom_getYMin_r: [
|
545
|
+
# 0 on exception, *handle, (double *) value
|
546
|
+
:int, :pointer, :pointer, :pointer
|
547
|
+
],
|
548
|
+
|
549
|
+
GEOSGeom_getYMax_r: [
|
550
|
+
# 0 on exception, *handle, (double *) value
|
551
|
+
:int, :pointer, :pointer, :pointer
|
552
|
+
],
|
553
|
+
|
481
554
|
GEOSSimplify_r: [
|
482
555
|
# *geom, *handle, *geom, tolerance
|
483
556
|
:pointer, :pointer, :pointer, :double
|
@@ -643,6 +716,11 @@ module Geos
|
|
643
716
|
:int, :pointer, :pointer, :pointer, :pointer
|
644
717
|
],
|
645
718
|
|
719
|
+
GEOSDistanceIndexed_r: [
|
720
|
+
# (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
|
721
|
+
:int, :pointer, :pointer, :pointer, :pointer
|
722
|
+
],
|
723
|
+
|
646
724
|
GEOSHausdorffDistance_r: [
|
647
725
|
# (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
|
648
726
|
:int, :pointer, :pointer, :pointer, :pointer
|
@@ -743,6 +821,16 @@ module Geos
|
|
743
821
|
:pointer, :pointer, :pointer
|
744
822
|
],
|
745
823
|
|
824
|
+
GEOSMaximumInscribedCircle_r: [
|
825
|
+
# *geom, *handle, *geom, tolerance
|
826
|
+
:pointer, :pointer, :pointer, :double
|
827
|
+
],
|
828
|
+
|
829
|
+
GEOSLargestEmptyCircle_r: [
|
830
|
+
# *geom, *handle, *geom, *geom, tolerance
|
831
|
+
:pointer, :pointer, :pointer, :pointer, :double
|
832
|
+
],
|
833
|
+
|
746
834
|
GEOSMinimumWidth_r: [
|
747
835
|
# *geom, *handle, *geom
|
748
836
|
:pointer, :pointer, :pointer
|
@@ -777,12 +865,12 @@ module Geos
|
|
777
865
|
|
778
866
|
GEOSSTRtree_query_r: [
|
779
867
|
# void, *handle, *tree, *geom, void query_callback((void *) item, (void *) user_data), (void *) user_data
|
780
|
-
:void, :pointer, :pointer, :pointer, callback([
|
868
|
+
:void, :pointer, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
|
781
869
|
],
|
782
870
|
|
783
871
|
GEOSSTRtree_iterate_r: [
|
784
872
|
# void, *handle, *tree, void query_callback((void *) item, (void *) user_data), (void *) user_data
|
785
|
-
:void, :pointer, :pointer, callback([
|
873
|
+
:void, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
|
786
874
|
],
|
787
875
|
|
788
876
|
GEOSSTRtree_remove_r: [
|
@@ -797,7 +885,7 @@ module Geos
|
|
797
885
|
|
798
886
|
GEOSSTRtree_nearest_generic_r: [
|
799
887
|
# *void, *handle, *tree, *item, *item_envelope, int distance_callback(*item_1, *item_2, *double, void *user_data), *user_data
|
800
|
-
:pointer, :pointer, :pointer, :pointer, :pointer, callback([
|
888
|
+
:pointer, :pointer, :pointer, :pointer, :pointer, callback([:pointer, :pointer, :pointer, :pointer], :int), :pointer
|
801
889
|
],
|
802
890
|
#### /STRtree functions ####
|
803
891
|
|
@@ -1105,13 +1193,11 @@ module Geos
|
|
1105
1193
|
def notice_handler=(method_or_block)
|
1106
1194
|
@notice_handler = method_or_block
|
1107
1195
|
FFIGeos.GEOSContext_setNoticeMessageHandler_r(@ptr, @notice_handler, nil)
|
1108
|
-
@notice_handler
|
1109
1196
|
end
|
1110
1197
|
|
1111
1198
|
def error_handler=(method_or_block)
|
1112
1199
|
@error_handler = method_or_block
|
1113
1200
|
FFIGeos.GEOSContext_setErrorMessageHandler_r(@ptr, @error_handler, nil)
|
1114
|
-
@error_handler
|
1115
1201
|
end
|
1116
1202
|
|
1117
1203
|
def notice_handler(&block)
|
@@ -1148,13 +1234,9 @@ module Geos
|
|
1148
1234
|
FFIGeos.finishGEOS_r(ptr)
|
1149
1235
|
end
|
1150
1236
|
|
1151
|
-
|
1152
|
-
@notice_handler
|
1153
|
-
end
|
1237
|
+
attr_reader :notice_handler
|
1154
1238
|
|
1155
|
-
|
1156
|
-
@error_handler
|
1157
|
-
end
|
1239
|
+
attr_reader :error_handler
|
1158
1240
|
end
|
1159
1241
|
|
1160
1242
|
private
|
@@ -1170,7 +1252,7 @@ module Geos
|
|
1170
1252
|
|
1171
1253
|
class << self
|
1172
1254
|
def version
|
1173
|
-
@version ||= FFIGeos.GEOSversion
|
1255
|
+
@version ||= FFIGeos.GEOSversion.strip
|
1174
1256
|
end
|
1175
1257
|
|
1176
1258
|
def jts_port
|
@@ -1281,30 +1363,34 @@ module Geos
|
|
1281
1363
|
GEOS_CAPI_VERSION,
|
1282
1364
|
GEOS_CAPI_VERSION_MAJOR, GEOS_CAPI_VERSION_MINOR, GEOS_CAPI_VERSION_PATCH,
|
1283
1365
|
GEOS_SVN_REVISION =
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
|
1301
|
-
|
1302
|
-
]
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1366
|
+
if (versions = Geos.version.scan(/^
|
1367
|
+
((\d+)\.(\d+)\.(\d+)((?:dev|rc|beta|alpha)\d*)?)
|
1368
|
+
-CAPI-
|
1369
|
+
((\d+)\.(\d+)\.(\d+))
|
1370
|
+
(?:\s+r?(\h+))?
|
1371
|
+
$/x)).empty?
|
1372
|
+
['0.0.0', 0, 0, 0, nil, '0.0.0', 0, 0, 0]
|
1373
|
+
else
|
1374
|
+
versions = versions[0]
|
1375
|
+
[
|
1376
|
+
versions[0],
|
1377
|
+
versions[1].to_i,
|
1378
|
+
versions[2].to_i,
|
1379
|
+
versions[3].to_i,
|
1380
|
+
versions[4],
|
1381
|
+
versions[5],
|
1382
|
+
versions[6].to_i,
|
1383
|
+
versions[7].to_i,
|
1384
|
+
versions[8].to_i,
|
1385
|
+
versions[9]&.to_i
|
1386
|
+
]
|
1387
|
+
end
|
1306
1388
|
GEOS_CAPI_FIRST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i
|
1307
1389
|
GEOS_CAPI_LAST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i + GEOS_CAPI_VERSION_MINOR.to_i
|
1390
|
+
|
1391
|
+
GEOS_NICE_VERSION = [GEOS_VERSION_MAJOR, GEOS_VERSION_MINOR, GEOS_VERSION_PATCH].collect { |version|
|
1392
|
+
version.to_s.rjust(2, '0')
|
1393
|
+
}.join
|
1308
1394
|
end
|
1309
1395
|
|
1310
1396
|
module Constants
|
@@ -0,0 +1,16 @@
|
|
1
|
+
sonar.projectKey=dark-panda_ffi-geos
|
2
|
+
sonar.organization=dark-panda
|
3
|
+
|
4
|
+
# This is the name and version displayed in the SonarCloud UI.
|
5
|
+
sonar.projectName=ffi-geos
|
6
|
+
sonar.projectVersion=1.0
|
7
|
+
|
8
|
+
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
9
|
+
sonar.sources=lib, test
|
10
|
+
|
11
|
+
# Encoding of the source code. Default is default system encoding
|
12
|
+
sonar.sourceEncoding=UTF-8
|
13
|
+
|
14
|
+
# Additional reports
|
15
|
+
sonar.ruby.rubocop.reportPaths=rubocop-report.json
|
16
|
+
sonar.ruby.coverage.reportPaths=coverage/coverage.json
|