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
data/.travis.yml CHANGED
@@ -1,17 +1,32 @@
1
1
  cache: bundler
2
2
  sudo: false
3
3
  language: ruby
4
+ dist: trusty
5
+
4
6
  rvm:
5
- - 2.4.0
6
- - 2.3.3
7
- - 2.2.6
8
- - rbx-3
9
- - jruby-19mode
10
- matrix:
11
- allow_failures:
12
- - rvm: rbx-3
13
- - rvm: jruby-19mode
7
+ - '2.7'
8
+ - '2.6'
9
+ - '2.5'
10
+ - jruby-head
11
+
14
12
  addons:
15
13
  apt:
16
14
  packages:
17
15
  - libgeos-c1
16
+ sonarcloud:
17
+ organization: "dark-panda"
18
+ token:
19
+ secure: UiS3BU1SUSbIynvaup+3w9NNa85mH3lXSa+iCQx9luhp5Nc5Zg4xedycfGylCzpr6D6vRRH3gYefafitcvjS8LbhtNd2Z4oezp2T4fRt8W387HJ3wIcRkyOwBhmQqt/SiPiQr/rkDE9VomelLe7RSkelfAQQvpka5TMzc4wKYd4=
20
+
21
+ git:
22
+ depth: false
23
+
24
+ before_install:
25
+ - gem install bundler
26
+
27
+ before_script:
28
+ - bundle exec rubocop --format=json > rubocop-report.json || true
29
+
30
+ script:
31
+ - bundle exec rake test
32
+ - sonar-scanner
data/FUNDING.yml ADDED
@@ -0,0 +1,2 @@
1
+ github:
2
+ - dark-panda
data/Gemfile CHANGED
@@ -1,25 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
4
6
 
5
- gem "rdoc", "~> 3.12"
6
- gem "rake", "~> 10.0"
7
- gem "minitest"
8
- gem "minitest-reporters"
7
+ gem 'guard'
8
+ gem 'guard-minitest'
9
+ gem 'minitest'
10
+ gem 'minitest-reporters'
11
+ gem 'rake'
12
+ gem 'rdoc'
13
+ gem 'rubocop', require: false
14
+ gem 'simplecov', '~> 0.17.0', require: false
9
15
 
10
16
  platforms :rbx do
11
- gem 'rubysl', '~> 2.0'
12
17
  gem 'rubinius-developer_tools'
18
+ gem 'rubysl', '~> 2.0'
13
19
  end
14
20
 
15
-
16
- if RUBY_VERSION >= '1.9'
17
- gem "simplecov"
18
- gem "guard"
19
- gem 'guard-minitest'
20
- end
21
-
22
- if File.exists?('Gemfile.local')
23
- instance_eval File.read('Gemfile.local')
24
- end
25
-
21
+ instance_eval File.read('Gemfile.local') if File.exist?('Gemfile.local')
data/Guardfile CHANGED
@@ -1,17 +1,15 @@
1
+ # frozen_string_literal: true
1
2
 
2
- guard 'minitest', :test_folders => 'test', :test_file_patterns => '*_tests.rb' do
3
- watch(%r|^test/(.+)_tests\.rb|)
3
+ guard 'minitest', test_folders: 'test', test_file_patterns: '*_tests.rb' do
4
+ watch(%r{^test/(.+)_tests\.rb})
4
5
 
5
6
  watch(%r{^lib/(.*/)?([^/]+)\.rb$}) do |m|
6
7
  "test/#{m[2]}_tests.rb"
7
8
  end
8
9
 
9
- watch(%r|^test/test_helper\.rb|) do
10
- "test"
10
+ watch(%r{^test/test_helper\.rb}) do
11
+ 'test'
11
12
  end
12
13
  end
13
14
 
14
- if File.exists?('Guardfile.local')
15
- instance_eval File.read('Guardfile.local')
16
- end
17
-
15
+ instance_eval File.read('Guardfile.local') if File.exist?('Guardfile.local')
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2017 J Smith <dark.panda@gmail.com>
1
+ Copyright (c) 2010-2021 J Smith <dark.panda@gmail.com>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
data/README.rdoc CHANGED
@@ -7,15 +7,8 @@
7
7
  * GEOS version 3.3.0 or greater. GEOS 3.2.2 and below will work to an extent,
8
8
  but some features and methods will be disabled or missing.
9
9
 
10
- Ruby versions known to work according to travis-ci and local testing:
11
-
12
- * Ruby MRI 1.9.3, 2.0+, 2.1+, 2.2+
13
- * Ruby MRI 1.8.7 works but as Ruby 1.8 is no longer being maintained, there's
14
- no guarantee this will continue in the future and is therefore no longer
15
- being tested with the same rigour as more modern versions of Ruby.
16
- * Rubinius 2
17
- * JRuby 1.6+, with the exception of versions of JRuby prior to 1.6.3 as per
18
- below. This includes both 1.8 and 1.9 modes.
10
+ We currently test on Travis CI using the current releases of MRI that are
11
+ maintained. See `.travis.yml` for a list. We also test against jruby-head.
19
12
 
20
13
  === JRuby Notes
21
14
 
@@ -74,17 +67,6 @@ Ruby bindings along with the following enhancements and additions:
74
67
  entire GEOS C API is represented in ffi-geos along with all sorts of useful
75
68
  convenience methods and geometry conversion and manipulation methods.
76
69
 
77
- * *NEW IN ffi-geos 1.0.0* -- all errors thrown by ffi-geos are now instances of
78
- Geos::Error or subclasses thereof. Geos::Error itself is a descendant
79
- of RuntimeError as is the case with the native Geos extension. This means
80
- that code like rescue RuntimeError should still work but you can now
81
- further capture more precise error types by capturing errors like
82
- Geos::Error, Geos::ParseError, etc.
83
-
84
- * *NEW IN ffi-geos 1.0.0* -- new methods for Geom::Geometry#voronoi_diagram,
85
- Geos::MultiLineString#closed? and Geos::Geometry#clip_by_rect when using
86
- GEOS 3.5.0+.
87
-
88
70
  == Thanks
89
71
 
90
72
  * Daniel Azuma for the testing and JRuby help.
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  # -*- ruby -*-
3
4
 
@@ -7,18 +8,19 @@ require 'rake/testtask'
7
8
  require 'rdoc/task'
8
9
  require 'bundler/gem_tasks'
9
10
 
10
- $:.push File.expand_path(File.dirname(__FILE__), 'lib')
11
+ $LOAD_PATH.push File.expand_path(File.dirname(__FILE__), 'lib')
11
12
 
12
13
  version = Geos::VERSION
13
14
 
14
15
  desc 'Test GEOS interface'
15
16
  Rake::TestTask.new(:test) do |t|
17
+ t.libs << "#{File.dirname(__FILE__)}/test"
16
18
  t.test_files = FileList['test/**/*_tests.rb']
17
19
  t.verbose = !!ENV['VERBOSE_TESTS']
18
20
  t.warning = !!ENV['WARNINGS']
19
21
  end
20
22
 
21
- task :default => :test
23
+ task default: :test
22
24
 
23
25
  begin
24
26
  desc 'Build docs'
data/ffi-geos.gemspec CHANGED
@@ -1,26 +1,25 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../lib/ffi-geos/version', __FILE__)
3
+ require File.expand_path('lib/ffi-geos/version', __dir__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "ffi-geos"
6
+ s.name = 'ffi-geos'
7
7
  s.version = Geos::VERSION
8
8
 
9
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
- s.authors = ["J Smith"]
11
- s.description = "An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS)."
9
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
10
+ s.authors = ['J Smith']
11
+ s.description = 'An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).'
12
12
  s.summary = s.description
13
- s.email = "dark.panda@gmail.com"
14
- s.license = "MIT"
13
+ s.email = 'dark.panda@gmail.com'
14
+ s.license = 'MIT'
15
15
  s.extra_rdoc_files = [
16
- "README.rdoc"
16
+ 'README.rdoc'
17
17
  ]
18
- s.files = `git ls-files`.split($\)
18
+ s.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
19
19
  s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
20
20
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
21
- s.homepage = "http://github.com/dark-panda/ffi-geos"
22
- s.require_paths = ["lib"]
21
+ s.homepage = 'http://github.com/dark-panda/ffi-geos'
22
+ s.require_paths = ['lib']
23
23
 
24
- s.add_dependency("ffi", [">= 1.0.0"])
24
+ s.add_dependency('ffi', ['>= 1.0.0'])
25
25
  end
26
-
data/lib/ffi-geos.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'ffi'
@@ -51,38 +50,36 @@ module Geos
51
50
 
52
51
  module FFIGeos
53
52
  def self.search_paths
54
- @search_paths ||= begin
53
+ @search_paths ||= \
55
54
  if ENV['GEOS_LIBRARY_PATH']
56
- [ ENV['GEOS_LIBRARY_PATH'] ]
55
+ [ENV['GEOS_LIBRARY_PATH']]
57
56
  elsif FFI::Platform::IS_WINDOWS
58
57
  ENV['PATH'].split(File::PATH_SEPARATOR)
59
58
  else
60
- [ '/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386}-linux-gnu' ]
59
+ ['/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386}-linux-gnu']
61
60
  end
62
- end
63
61
  end
64
62
 
65
63
  def self.find_lib(lib)
66
64
  if ENV['GEOS_LIBRARY_PATH'] && File.file?(ENV['GEOS_LIBRARY_PATH'])
67
65
  ENV['GEOS_LIBRARY_PATH']
68
66
  else
69
- Dir.glob(search_paths.map { |path|
67
+ Dir.glob(search_paths.map do |path|
70
68
  File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}{,.?}"))
71
- }).first
69
+ end).first
72
70
  end
73
71
  end
74
72
 
75
73
  def self.geos_library_path
76
- @geos_library_path ||= begin
74
+ @geos_library_path ||= \
77
75
  # On MingW the libraries have version numbers
78
76
  find_lib('{lib,}geos_c{,-?}')
79
- end
80
77
  end
81
78
 
82
79
  # For backwards compatibility with older ffi-geos versions where this
83
80
  # used to return an Array.
84
81
  def self.geos_library_paths
85
- [ self.geos_library_path ]
82
+ [geos_library_path]
86
83
  end
87
84
 
88
85
  extend ::FFI::Library
@@ -147,896 +144,1000 @@ module Geos
147
144
  # Initialization and cleanup
148
145
 
149
146
  # deprecated in GEOS 3.5.0+
150
- :initGEOS_r => [
147
+ initGEOS_r: [
151
148
  :pointer,
152
149
 
153
150
  # notice callback
154
- callback([ :string, :string ], :void),
151
+ callback([:string, :string], :void),
155
152
 
156
153
  # error callback
157
- callback([ :string, :string ], :void)
154
+ callback([:string, :string], :void)
158
155
  ],
159
156
 
160
- :finishGEOS_r => [
157
+ finishGEOS_r: [
161
158
  # void, *handle
162
159
  :void, :pointer
163
160
  ],
164
161
  # / deprecated in GEOS 3.5.0+
165
162
 
166
163
  # GEOS 3.5.0+
167
- :GEOS_init_r => [ :pointer ],
164
+ GEOS_init_r: [:pointer],
168
165
 
169
- :GEOSContext_setNoticeMessageHandler_r => [
166
+ GEOSContext_setNoticeMessageHandler_r: [
170
167
  # void, *handle, callback, *void
171
- :void, :pointer, callback([ :string, :string ], :void), :pointer
168
+ :void, :pointer, callback([:string, :string], :void), :pointer
172
169
  ],
173
170
 
174
- :GEOSContext_setErrorMessageHandler_r => [
171
+ GEOSContext_setErrorMessageHandler_r: [
175
172
  # void, *handle, callback, *void
176
- :void, :pointer, callback([ :string, :string ], :void), :pointer
173
+ :void, :pointer, callback([:string, :string], :void), :pointer
177
174
  ],
178
175
 
179
- :GEOS_finish_r => [
176
+ GEOS_finish_r: [
180
177
  # void, *handle
181
178
  :void, :pointer
182
179
  ],
183
180
  # / GEOS 3.5.0+
184
181
 
185
- :GEOS_interruptRegisterCallback => [
182
+ GEOS_interruptRegisterCallback: [
186
183
  :pointer,
187
184
  callback([], :void)
188
185
  ],
189
186
 
190
- :GEOS_interruptRequest => [
187
+ GEOS_interruptRequest: [
191
188
  :void
192
189
  ],
193
190
 
194
- :GEOS_interruptCancel => [
191
+ GEOS_interruptCancel: [
195
192
  :void
196
193
  ],
197
194
 
198
- :GEOSversion => [
195
+ GEOSversion: [
199
196
  :string
200
197
  ],
201
198
 
202
- :GEOSjtsport => [
199
+ GEOSjtsport: [
203
200
  :string
204
201
  ],
205
202
 
206
- :GEOSPolygonize_r => [
203
+ GEOSPolygonize_r: [
207
204
  # *geom, *handle, **geoms, ngeoms
208
205
  :pointer, :pointer, :pointer, :uint
209
206
  ],
210
207
 
211
- :GEOSPolygonizer_getCutEdges_r => [
208
+ GEOSPolygonize_valid_r: [
212
209
  # *geom, *handle, **geoms, ngeoms
213
210
  :pointer, :pointer, :pointer, :uint
214
211
  ],
215
212
 
216
- :GEOSPolygonize_full_r => [
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
+
223
+ GEOSPolygonizer_getCutEdges_r: [
224
+ # *geom, *handle, **geoms, ngeoms
225
+ :pointer, :pointer, :pointer, :uint
226
+ ],
227
+
228
+ GEOSPolygonize_full_r: [
217
229
  # *geom, *handle, *geom, **cuts, **dangles, **invalid
218
230
  :pointer, :pointer, :pointer, :pointer, :pointer, :pointer
219
231
  ],
220
232
 
221
- :GEOSGeom_createPoint_r => [
233
+ GEOSGeom_createPoint_r: [
222
234
  # *geom, *handle, *coord_seq
223
235
  :pointer, :pointer, :pointer
224
236
  ],
225
237
 
226
- :GEOSGeom_createEmptyPoint_r => [
238
+ GEOSGeom_createEmptyPoint_r: [
227
239
  # *geom, *handle
228
240
  :pointer, :pointer
229
241
  ],
230
242
 
231
- :GEOSGeom_createEmptyLineString_r => [
243
+ GEOSGeom_createEmptyLineString_r: [
232
244
  # *geom, *handle
233
245
  :pointer, :pointer
234
246
  ],
235
247
 
236
- :GEOSGeom_createLinearRing_r => [
248
+ GEOSGeom_createLinearRing_r: [
237
249
  # *geom, *handle, *coord_seq
238
250
  :pointer, :pointer, :pointer
239
251
  ],
240
252
 
241
- :GEOSGeom_createLineString_r => [
253
+ GEOSGeom_createLineString_r: [
242
254
  # *geom, *handle, *coord_seq
243
255
  :pointer, :pointer, :pointer
244
256
  ],
245
257
 
246
- :GEOSGeom_createPolygon_r => [
258
+ GEOSGeom_createPolygon_r: [
247
259
  # *geom, *handle, *geom, **holes, nholes
248
260
  :pointer, :pointer, :pointer, :pointer, :uint
249
261
  ],
250
262
 
251
- :GEOSGeom_createEmptyPolygon_r => [
263
+ GEOSGeom_createEmptyPolygon_r: [
252
264
  # *geom, *handle
253
265
  :pointer, :pointer
254
266
  ],
255
267
 
256
- :GEOSGeom_createCollection_r => [
268
+ GEOSGeom_createCollection_r: [
257
269
  # *geom, *handle, type, **geoms, ngeoms
258
270
  :pointer, :pointer, :geometry_type, :pointer, :uint
259
271
  ],
260
272
 
261
- :GEOSGeom_createEmptyCollection_r => [
273
+ GEOSGeom_createEmptyCollection_r: [
262
274
  # *geom, *handle, type
263
275
  :pointer, :pointer, :geometry_type
264
276
  ],
265
277
  #### /Utility functions ####
266
278
 
267
279
  #### CoordinateSequence functions ####
268
- :GEOSCoordSeq_create_r => [
280
+ GEOSCoordSeq_create_r: [
269
281
  # *coord_seq, *handle, size, dims
270
282
  :pointer, :pointer, :uint, :uint
271
283
  ],
272
284
 
273
- :GEOSCoordSeq_destroy_r => [
285
+ GEOSCoordSeq_destroy_r: [
274
286
  # void, *handle, *coord_seq
275
287
  :void, :pointer, :pointer
276
288
  ],
277
289
 
278
- :GEOSCoordSeq_clone_r => [
290
+ GEOSCoordSeq_clone_r: [
279
291
  # *coord_seq, *handle, *coord_seq
280
292
  :pointer, :pointer, :pointer
281
293
  ],
282
294
 
283
- :GEOSCoordSeq_setX_r => [
295
+ GEOSCoordSeq_setX_r: [
284
296
  # 0 on exception, *handle, *coord_seq, idx, val
285
297
  :int, :pointer, :pointer, :uint, :double
286
298
  ],
287
299
 
288
- :GEOSCoordSeq_setY_r => [
300
+ GEOSCoordSeq_setY_r: [
289
301
  # 0 on exception, *handle, *coord_seq, idx, val
290
302
  :int, :pointer, :pointer, :uint, :double
291
303
  ],
292
304
 
293
- :GEOSCoordSeq_setZ_r => [
305
+ GEOSCoordSeq_setZ_r: [
294
306
  # 0 on exception, *handle, *coord_seq, idx, val
295
307
  :int, :pointer, :pointer, :uint, :double
296
308
  ],
297
309
 
298
- :GEOSCoordSeq_setOrdinate_r => [
310
+ GEOSCoordSeq_setOrdinate_r: [
299
311
  # 0 on exception, *handle, *coord_seq, idx, dim, val
300
312
  :int, :pointer, :pointer, :uint, :uint, :double
301
313
  ],
302
314
 
303
- :GEOSCoordSeq_getX_r => [
315
+ GEOSCoordSeq_getX_r: [
304
316
  # 0 on exception, *handle, *coord_seq, idx, (double *) val
305
317
  :int, :pointer, :pointer, :uint, :pointer
306
318
  ],
307
319
 
308
- :GEOSCoordSeq_getY_r => [
320
+ GEOSCoordSeq_getY_r: [
309
321
  # 0 on exception, *handle, *coord_seq, idx, (double *) val
310
322
  :int, :pointer, :pointer, :uint, :pointer
311
323
  ],
312
324
 
313
- :GEOSCoordSeq_getZ_r => [
325
+ GEOSCoordSeq_getZ_r: [
314
326
  # 0 on exception, *handle, *coord_seq, idx, (double *) val
315
327
  :int, :pointer, :pointer, :uint, :pointer
316
328
  ],
317
329
 
318
- :GEOSCoordSeq_getOrdinate_r => [
330
+ GEOSCoordSeq_getOrdinate_r: [
319
331
  # 0 on exception, *handle, *coord_seq, idx, dim, (double *) val
320
332
  :int, :pointer, :pointer, :uint, :uint, :pointer
321
333
  ],
322
334
 
323
- :GEOSCoordSeq_getSize_r => [
335
+ GEOSCoordSeq_getSize_r: [
324
336
  # 0 on exception, *handle, *coord_seq, (uint *) size
325
337
  :int, :pointer, :pointer, :pointer
326
338
  ],
327
339
 
328
- :GEOSCoordSeq_getDimensions_r => [
340
+ GEOSCoordSeq_getDimensions_r: [
329
341
  # 0 on exception, *handle, *coord_seq, (uint *) size
330
342
  :int, :pointer, :pointer, :pointer
331
343
  ],
344
+
345
+ GEOSCoordSeq_isCCW_r: [
346
+ # 0 on exception, *handle, *coord_seq, (char *) value
347
+ :int, :pointer, :pointer, :pointer
348
+ ],
332
349
  #### /CoordinateSequence functions ####
333
350
 
334
351
  #### Geometry functions ####
335
- :GEOSGeom_destroy_r => [
352
+ GEOSGeom_destroy_r: [
336
353
  # void, *handle, *geom
337
354
  :void, :pointer, :pointer
338
355
  ],
339
356
 
340
- :GEOSGeom_clone_r => [
357
+ GEOSGeom_clone_r: [
341
358
  # *geom, *handle, *geom
342
359
  :pointer, :pointer, :pointer
343
360
  ],
344
361
 
345
- :GEOSGeomTypeId_r => [
362
+ GEOSGeomTypeId_r: [
346
363
  # type, *handle, *geom
347
364
  :int, :pointer, :pointer
348
365
  ],
349
366
 
350
- :GEOSGeomType_r => [
367
+ GEOSGeomType_r: [
351
368
  # type, *handle, *geom
352
369
  :string, :pointer, :pointer
353
370
  ],
354
371
 
355
- :GEOSGetSRID_r => [
372
+ GEOSGetSRID_r: [
356
373
  # srid, *handle, *geom
357
374
  :int, :pointer, :pointer
358
375
  ],
359
376
 
360
- :GEOSSetSRID_r => [
377
+ GEOSSetSRID_r: [
361
378
  # void, *handle, *geom, srid
362
379
  :void, :pointer, :pointer, :int
363
380
  ],
364
381
 
365
- :GEOSGeom_getDimensions_r => [
382
+ GEOSGeom_getDimensions_r: [
366
383
  # dims, *handle, *geom
367
384
  :int, :pointer, :pointer
368
385
  ],
369
386
 
370
- :GEOSGetNumGeometries_r => [
387
+ GEOSGetNumGeometries_r: [
371
388
  # ngeoms, *handle, *geom
372
389
  :int, :pointer, :pointer
373
390
  ],
374
391
 
375
- :GEOSGetNumCoordinates_r => [
392
+ GEOSGetNumCoordinates_r: [
376
393
  # numcoords, *handle, *geom
377
394
  :int, :pointer, :pointer
378
395
  ],
379
396
 
380
- :GEOSGeom_getCoordSeq_r => [
397
+ GEOSGeom_getCoordSeq_r: [
381
398
  # *coord_seq, *handle, *geom
382
399
  :pointer, :pointer, :pointer
383
400
  ],
384
401
 
385
- :GEOSIntersection_r => [
402
+ GEOSIntersection_r: [
386
403
  # *geom, *handle, *geom_a, *geom_b
387
404
  :pointer, :pointer, :pointer, :pointer
388
405
  ],
389
406
 
390
- :GEOSBufferWithParams_r => [
407
+ GEOSIntersectionPrec_r: [
408
+ # *geom, *handle, *geom_a, *geom_b, precision
409
+ :pointer, :pointer, :pointer, :pointer, :double
410
+ ],
411
+
412
+ GEOSBufferWithParams_r: [
391
413
  # *geom, *handle, *geom, *params, width
392
414
  :pointer, :pointer, :pointer, :pointer, :double
393
415
  ],
394
416
 
395
- :GEOSBuffer_r => [
417
+ GEOSBuffer_r: [
396
418
  # *geom, *handle, *geom, width, quad_segs
397
419
  :pointer, :pointer, :pointer, :double, :int
398
420
  ],
399
421
 
400
- :GEOSBufferWithStyle_r => [
422
+ GEOSBufferWithStyle_r: [
401
423
  # *geom, *handle, *geom, width, quad_segs, buffer_cap_style, buffer_join_style, mitre_limit
402
424
  :pointer, :pointer, :pointer, :double, :int, :buffer_cap_style, :buffer_join_style, :double
403
425
  ],
404
426
 
405
427
  # Deprecated in GEOS 3.3.0.
406
- :GEOSSingleSidedBuffer_r => [
428
+ GEOSSingleSidedBuffer_r: [
407
429
  # *geom, *handle, *geom, width, quad_segs, buffer_join_style, mitre_limit, is_left
408
430
  :pointer, :pointer, :pointer, :double, :int, :buffer_join_style, :double, :int
409
431
  ],
410
432
 
411
- :GEOSOffsetCurve_r => [
433
+ GEOSOffsetCurve_r: [
412
434
  # *geom, *handle, *geom, width, quad_segs, buffer_join_style, mitre_limit
413
435
  :pointer, :pointer, :pointer, :double, :int, :buffer_join_style, :double
414
436
  ],
415
437
 
416
- :GEOSConvexHull_r => [
438
+ GEOSConvexHull_r: [
417
439
  # *geom, *handle, *geom
418
440
  :pointer, :pointer, :pointer
419
441
  ],
420
442
 
421
- :GEOSDifference_r => [
443
+ GEOSDifference_r: [
422
444
  # *geom, *handle, *geom_a, *geom_b
423
445
  :pointer, :pointer, :pointer, :pointer
424
446
  ],
425
447
 
426
- :GEOSSymDifference_r => [
448
+ GEOSDifferencePrec_r: [
449
+ # *geom, *handle, *geom_a, *geom_b, precision
450
+ :pointer, :pointer, :pointer, :pointer, :double
451
+ ],
452
+
453
+ GEOSSymDifference_r: [
427
454
  # *geom, *handle, *geom_a, *geom_b
428
455
  :pointer, :pointer, :pointer, :pointer
429
456
  ],
430
457
 
431
- :GEOSBoundary_r => [
458
+ GEOSSymDifferencePrec_r: [
459
+ # *geom, *handle, *geom_a, *geom_b, precision
460
+ :pointer, :pointer, :pointer, :pointer, :double
461
+ ],
462
+
463
+ GEOSBoundary_r: [
432
464
  # *geom, *handle, *geom
433
465
  :pointer, :pointer, :pointer
434
466
  ],
435
467
 
436
- :GEOSUnion_r => [
468
+ GEOSUnion_r: [
437
469
  # *geom, *handle, *geom_a, *geom_b
438
470
  :pointer, :pointer, :pointer, :pointer
439
471
  ],
440
472
 
441
- :GEOSUnaryUnion_r => [
473
+ GEOSUnionPrec_r: [
474
+ # *geom, *handle, *geom_a, *geom_b, precision
475
+ :pointer, :pointer, :pointer, :pointer, :double
476
+ ],
477
+
478
+ GEOSCoverageUnion_r: [
442
479
  # *geom, *handle, *geom
443
480
  :pointer, :pointer, :pointer
444
481
  ],
445
482
 
446
- :GEOSNode_r => [
483
+ GEOSUnaryUnion_r: [
484
+ # *geom, *handle, *geom
485
+ :pointer, :pointer, :pointer
486
+ ],
487
+
488
+ GEOSUnaryUnionPrec_r: [
489
+ # *geom, *handle, *geom, precision
490
+ :pointer, :pointer, :pointer, :double
491
+ ],
492
+
493
+ GEOSNode_r: [
447
494
  # *geom, *handle, *geom
448
495
  :pointer, :pointer, :pointer
449
496
  ],
450
497
 
451
498
  # Deprecated in GEOS 3.3.0. Use GEOSUnaryUnion_r instead.
452
- :GEOSUnionCascaded_r => [
499
+ GEOSUnionCascaded_r: [
453
500
  # *geom, *handle, *geom
454
501
  :pointer, :pointer, :pointer
455
502
  ],
456
503
 
457
- :GEOSPointOnSurface_r => [
504
+ GEOSPointOnSurface_r: [
458
505
  # *geom, *handle, *geom
459
506
  :pointer, :pointer, :pointer
460
507
  ],
461
508
 
462
- :GEOSClipByRect_r => [
509
+ GEOSClipByRect_r: [
463
510
  # *geom, *handle, *geom, xmin, ymin, xmax, ymax
464
511
  :pointer, :pointer, :pointer, :double, :double, :double, :double
465
512
  ],
466
513
 
467
- :GEOSGetCentroid_r => [
514
+ GEOSGetCentroid_r: [
468
515
  # *geom, *handle, *geom
469
516
  :pointer, :pointer, :pointer
470
517
  ],
471
518
 
472
- :GEOSEnvelope_r => [
519
+ GEOSMinimumBoundingCircle_r: [
520
+ # *geom, *handle, *geom, *double radius, **geom center
521
+ :pointer, :pointer, :pointer, :pointer, :pointer
522
+ ],
523
+
524
+ GEOSEnvelope_r: [
473
525
  # *geom, *handle, *geom
474
526
  :pointer, :pointer, :pointer
475
527
  ],
476
528
 
477
- :GEOSLineMerge_r => [
529
+ GEOSLineMerge_r: [
478
530
  # *geom, *handle, *geom
479
531
  :pointer, :pointer, :pointer
480
532
  ],
481
533
 
482
- :GEOSSimplify_r => [
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
+
554
+ GEOSSimplify_r: [
483
555
  # *geom, *handle, *geom, tolerance
484
556
  :pointer, :pointer, :pointer, :double
485
557
  ],
486
558
 
487
- :GEOSTopologyPreserveSimplify_r => [
559
+ GEOSTopologyPreserveSimplify_r: [
488
560
  # *geom, *handle, *geom, tolerance
489
561
  :pointer, :pointer, :pointer, :double
490
562
  ],
491
563
 
492
- :GEOSGeom_extractUniquePoints_r => [
564
+ GEOSGeom_extractUniquePoints_r: [
493
565
  # *geom, *handle, *geom
494
566
  :pointer, :pointer, :pointer
495
567
  ],
496
568
 
497
- :GEOSSharedPaths_r => [
569
+ GEOSSharedPaths_r: [
498
570
  # *geom, *handle, *geom_a, *geom_b
499
571
  :pointer, :pointer, :pointer, :pointer
500
572
  ],
501
573
 
502
- :GEOSSnap_r => [
574
+ GEOSSnap_r: [
503
575
  # *geom, *handle, *geom_a, *geom_b, tolerance
504
576
  :pointer, :pointer, :pointer, :pointer, :double
505
577
  ],
506
578
 
507
- :GEOSDelaunayTriangulation_r => [
579
+ GEOSDelaunayTriangulation_r: [
508
580
  # *geom, *handle, *geom, tolerance, only_edges
509
581
  :pointer, :pointer, :pointer, :double, :int
510
582
  ],
511
583
 
512
- :GEOSVoronoiDiagram_r => [
584
+ GEOSVoronoiDiagram_r: [
513
585
  # *geom, *handle, *geom, *envelope, tolerance, only_edges
514
586
  :pointer, :pointer, :pointer, :pointer, :double, :int
515
587
  ],
516
588
 
517
- :GEOSRelate_r => [
589
+ GEOSRelate_r: [
518
590
  # string, *handle, *geom_a, *geom_b
519
591
  :string, :pointer, :pointer, :pointer
520
592
  ],
521
593
 
522
- :GEOSRelatePatternMatch_r => [
594
+ GEOSRelatePatternMatch_r: [
523
595
  # (2 on exception, 1 on true, 2 on false), *handle, pattern_a, pattern_b
524
596
  :char, :pointer, :string, :string
525
597
  ],
526
598
 
527
- :GEOSRelatePattern_r => [
599
+ GEOSRelatePattern_r: [
528
600
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b, pattern
529
601
  :char, :pointer, :pointer, :pointer, :string
530
602
  ],
531
603
 
532
- :GEOSRelateBoundaryNodeRule_r => [
604
+ GEOSRelateBoundaryNodeRule_r: [
533
605
  # string, *handle, *geom_a, *geom_b, bnr
534
606
  :string, :pointer, :pointer, :pointer, :relate_boundary_node_rule
535
607
  ],
536
608
 
537
- :GEOSDisjoint_r => [
609
+ GEOSDisjoint_r: [
538
610
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
539
611
  :char, :pointer, :pointer, :pointer
540
612
  ],
541
613
 
542
- :GEOSTouches_r => [
614
+ GEOSTouches_r: [
543
615
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
544
616
  :char, :pointer, :pointer, :pointer
545
617
  ],
546
618
 
547
- :GEOSIntersects_r => [
619
+ GEOSIntersects_r: [
548
620
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
549
621
  :char, :pointer, :pointer, :pointer
550
622
  ],
551
623
 
552
- :GEOSCrosses_r => [
624
+ GEOSCrosses_r: [
553
625
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
554
626
  :char, :pointer, :pointer, :pointer
555
627
  ],
556
628
 
557
- :GEOSWithin_r => [
629
+ GEOSWithin_r: [
558
630
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
559
631
  :char, :pointer, :pointer, :pointer
560
632
  ],
561
633
 
562
- :GEOSContains_r => [
634
+ GEOSContains_r: [
563
635
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
564
636
  :char, :pointer, :pointer, :pointer
565
637
  ],
566
638
 
567
- :GEOSOverlaps_r => [
639
+ GEOSOverlaps_r: [
568
640
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
569
641
  :char, :pointer, :pointer, :pointer
570
642
  ],
571
643
 
572
- :GEOSCovers_r => [
644
+ GEOSCovers_r: [
573
645
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
574
646
  :char, :pointer, :pointer, :pointer
575
647
  ],
576
648
 
577
- :GEOSCoveredBy_r => [
649
+ GEOSCoveredBy_r: [
578
650
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
579
651
  :char, :pointer, :pointer, :pointer
580
652
  ],
581
653
 
582
- :GEOSEquals_r => [
654
+ GEOSEquals_r: [
583
655
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
584
656
  :char, :pointer, :pointer, :pointer
585
657
  ],
586
658
 
587
- :GEOSEqualsExact_r => [
659
+ GEOSEqualsExact_r: [
588
660
  # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
589
661
  :char, :pointer, :pointer, :pointer, :double
590
662
  ],
591
663
 
592
- :GEOSisEmpty_r => [
664
+ GEOSisEmpty_r: [
593
665
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
594
666
  :char, :pointer, :pointer
595
667
  ],
596
668
 
597
- :GEOSisValid_r => [
669
+ GEOSisValid_r: [
598
670
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
599
671
  :char, :pointer, :pointer
600
672
  ],
601
673
 
602
- :GEOSisValidReason_r => [
674
+ GEOSisValidReason_r: [
603
675
  # reason, *handle, *geom
604
676
  :string, :pointer, :pointer
605
677
  ],
606
678
 
607
- :GEOSisValidDetail_r => [
679
+ GEOSisValidDetail_r: [
608
680
  # (2 on exception, 1 on true, 2 on false), *handle, *geom, flags, (string**) reasons, **geoms
609
681
  :char, :pointer, :pointer, :int, :pointer, :pointer
610
682
  ],
611
683
 
612
- :GEOSisSimple_r => [
684
+ GEOSisSimple_r: [
613
685
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
614
686
  :char, :pointer, :pointer
615
687
  ],
616
688
 
617
- :GEOSisRing_r => [
689
+ GEOSisRing_r: [
618
690
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
619
691
  :char, :pointer, :pointer
620
692
  ],
621
693
 
622
- :GEOSHasZ_r => [
694
+ GEOSHasZ_r: [
623
695
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
624
696
  :char, :pointer, :pointer
625
697
  ],
626
698
 
627
- :GEOSisClosed_r => [
699
+ GEOSisClosed_r: [
628
700
  # (2 on exception, 1 on true, 2 on false), *handle, *geom
629
701
  :char, :pointer, :pointer
630
702
  ],
631
703
 
632
- :GEOSArea_r => [
704
+ GEOSArea_r: [
633
705
  # (0 on exception, 1 otherwise), *handle, *geom, (double *) area
634
706
  :int, :pointer, :pointer, :pointer
635
707
  ],
636
708
 
637
- :GEOSLength_r => [
709
+ GEOSLength_r: [
638
710
  # (0 on exception, 1 otherwise), *handle, *geom, (double *) length
639
711
  :int, :pointer, :pointer, :pointer
640
712
  ],
641
713
 
642
- :GEOSDistance_r => [
714
+ GEOSDistance_r: [
643
715
  # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
644
716
  :int, :pointer, :pointer, :pointer, :pointer
645
717
  ],
646
718
 
647
- :GEOSHausdorffDistance_r => [
719
+ GEOSDistanceIndexed_r: [
648
720
  # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
649
721
  :int, :pointer, :pointer, :pointer, :pointer
650
722
  ],
651
723
 
652
- :GEOSHausdorffDistanceDensify_r => [
724
+ GEOSHausdorffDistance_r: [
725
+ # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
726
+ :int, :pointer, :pointer, :pointer, :pointer
727
+ ],
728
+
729
+ GEOSHausdorffDistanceDensify_r: [
653
730
  # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, densifyFrac, (double *) distance
654
731
  :int, :pointer, :pointer, :pointer, :double, :pointer
655
732
  ],
656
733
 
657
- :GEOSNearestPoints_r => [
734
+ GEOSNearestPoints_r: [
658
735
  # (NULL on exception, pointer to CoordinateSequence otherwise), *handle, *geom, *geom
659
736
  :pointer, :pointer, :pointer, :pointer
660
737
  ],
661
738
 
662
- :GEOSGetGeometryN_r => [
739
+ GEOSGetGeometryN_r: [
663
740
  # *geom, *handle, *geom, n
664
741
  :pointer, :pointer, :pointer, :int
665
742
  ],
666
743
 
667
- :GEOSGetNumInteriorRings_r => [
744
+ GEOSGetNumInteriorRings_r: [
668
745
  # rings, *handle, *geom
669
746
  :int, :pointer, :pointer
670
747
  ],
671
748
 
672
- :GEOSNormalize_r => [
749
+ GEOSNormalize_r: [
673
750
  # -1 on exception, *handle, *geom
674
751
  :int, :pointer, :pointer
675
752
  ],
676
753
 
677
- :GEOSGetInteriorRingN_r => [
754
+ GEOSGetInteriorRingN_r: [
678
755
  # *geom, *handle, *geom, n
679
756
  :pointer, :pointer, :pointer, :int
680
757
  ],
681
758
 
682
- :GEOSGetExteriorRing_r => [
759
+ GEOSGetExteriorRing_r: [
683
760
  # *geom, *handle, *geom
684
761
  :pointer, :pointer, :pointer
685
762
  ],
686
763
 
687
- :GEOSGeomGetNumPoints_r => [
764
+ GEOSGeomGetNumPoints_r: [
688
765
  # numpoints, *handle, *geom
689
766
  :int, :pointer, :pointer
690
767
  ],
691
768
 
692
- :GEOSGeomGetX_r => [
769
+ GEOSGeomGetX_r: [
693
770
  # -1 on exception, *handle, *geom, *point
694
771
  :int, :pointer, :pointer, :pointer
695
772
  ],
696
773
 
697
- :GEOSGeomGetY_r => [
774
+ GEOSGeomGetY_r: [
698
775
  # -1 on exception, *handle, *geom, *point
699
776
  :int, :pointer, :pointer, :pointer
700
777
  ],
701
778
 
702
- :GEOSGeomGetZ_r => [
779
+ GEOSGeomGetZ_r: [
703
780
  # -1 on exception, *handle, *geom, *point
704
781
  :int, :pointer, :pointer, :pointer
705
782
  ],
706
783
 
707
- :GEOSGeomGetPointN_r => [
784
+ GEOSGeomGetPointN_r: [
708
785
  # *point, *handle, *geom, n
709
786
  :pointer, :pointer, :pointer, :int
710
787
  ],
711
788
 
712
- :GEOSGeomGetStartPoint_r => [
789
+ GEOSGeomGetStartPoint_r: [
713
790
  # *point, *handle, *geom
714
791
  :pointer, :pointer, :pointer
715
792
  ],
716
793
 
717
- :GEOSGeomGetEndPoint_r => [
794
+ GEOSGeomGetEndPoint_r: [
718
795
  # *point, *handle, *geom
719
796
  :pointer, :pointer, :pointer
720
797
  ],
721
798
 
722
- :GEOSGeom_setPrecision_r => [
799
+ GEOSGeom_setPrecision_r: [
723
800
  # *geom, *hande, *geom, grid_size, int flags
724
801
  :pointer, :pointer, :pointer, :double, :int
725
802
  ],
726
803
 
727
- :GEOSGeom_getPrecision_r => [
804
+ GEOSGeom_getPrecision_r: [
728
805
  # precision, *hande, *geom
729
806
  :double, :pointer, :pointer
730
807
  ],
731
808
 
732
- :GEOSMinimumRotatedRectangle_r => [
809
+ GEOSMinimumRotatedRectangle_r: [
733
810
  # *geom, *handle, *geom
734
811
  :pointer, :pointer, :pointer
735
812
  ],
736
813
 
737
- :GEOSMinimumClearance_r => [
814
+ GEOSMinimumClearance_r: [
738
815
  # 0 on success, *handle, *geom, *clearance
739
816
  :int, :pointer, :pointer, :pointer
740
817
  ],
741
818
 
742
- :GEOSMinimumClearanceLine_r => [
819
+ GEOSMinimumClearanceLine_r: [
743
820
  # *geom, *handle, *geom
744
821
  :pointer, :pointer, :pointer
745
822
  ],
746
823
 
747
- :GEOSMinimumWidth_r => [
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
+
834
+ GEOSMinimumWidth_r: [
748
835
  # *geom, *handle, *geom
749
836
  :pointer, :pointer, :pointer
750
837
  ],
838
+
839
+ GEOSReverse_r: [
840
+ # *geom, *handle, *geom
841
+ :pointer, :pointer, :pointer
842
+ ],
843
+
844
+ GEOSFrechetDistance_r: [
845
+ # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
846
+ :int, :pointer, :pointer, :pointer, :pointer
847
+ ],
848
+
849
+ GEOSFrechetDistanceDensify_r: [
850
+ # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, densifyFrac, (double *) distance
851
+ :int, :pointer, :pointer, :pointer, :double, :pointer
852
+ ],
751
853
  #### /Geometry functions ####
752
854
 
753
855
  #### STRtree functions ####
754
- :GEOSSTRtree_create_r => [
856
+ GEOSSTRtree_create_r: [
755
857
  # *tree, *handle, node_capacity
756
858
  :pointer, :pointer, :size_t
757
859
  ],
758
860
 
759
- :GEOSSTRtree_insert_r => [
861
+ GEOSSTRtree_insert_r: [
760
862
  # void, *handle, *tree, *geom, *void
761
863
  :void, :pointer, :pointer, :pointer, :pointer
762
864
  ],
763
865
 
764
- :GEOSSTRtree_query_r => [
866
+ GEOSSTRtree_query_r: [
765
867
  # void, *handle, *tree, *geom, void query_callback((void *) item, (void *) user_data), (void *) user_data
766
- :void, :pointer, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
868
+ :void, :pointer, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
767
869
  ],
768
870
 
769
- :GEOSSTRtree_iterate_r => [
871
+ GEOSSTRtree_iterate_r: [
770
872
  # void, *handle, *tree, void query_callback((void *) item, (void *) user_data), (void *) user_data
771
- :void, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
873
+ :void, :pointer, :pointer, callback([:pointer, :pointer], :void), :pointer
772
874
  ],
773
875
 
774
- :GEOSSTRtree_remove_r => [
876
+ GEOSSTRtree_remove_r: [
775
877
  # bool, *handle, *tree, *geom, (void *) item
776
878
  :char, :pointer, :pointer, :pointer, :pointer
777
879
  ],
778
880
 
779
- :GEOSSTRtree_destroy_r => [
881
+ GEOSSTRtree_destroy_r: [
780
882
  # void, *handle, *tree
781
883
  :void, :pointer, :pointer
782
884
  ],
783
885
 
784
- :GEOSSTRtree_nearest_generic_r => [
886
+ GEOSSTRtree_nearest_generic_r: [
785
887
  # *void, *handle, *tree, *item, *item_envelope, int distance_callback(*item_1, *item_2, *double, void *user_data), *user_data
786
- :pointer, :pointer, :pointer, :pointer, :pointer, callback([ :pointer, :pointer, :pointer, :pointer ], :int), :pointer
888
+ :pointer, :pointer, :pointer, :pointer, :pointer, callback([:pointer, :pointer, :pointer, :pointer], :int), :pointer
787
889
  ],
788
890
  #### /STRtree functions ####
789
891
 
790
892
  #### PreparedGeometry functions ####
791
- :GEOSPrepare_r => [
893
+ GEOSPrepare_r: [
792
894
  # *prepared, *handle, *geom
793
895
  :pointer, :pointer, :pointer
794
896
  ],
795
897
 
796
- :GEOSPreparedGeom_destroy_r => [
898
+ GEOSPreparedGeom_destroy_r: [
797
899
  # void, *handle, *geom
798
900
  :void, :pointer, :pointer
799
901
  ],
800
902
 
801
- :GEOSPreparedContains_r => [
903
+ GEOSPreparedContains_r: [
802
904
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
803
905
  :char, :pointer, :pointer, :pointer
804
906
  ],
805
907
 
806
- :GEOSPreparedContainsProperly_r => [
908
+ GEOSPreparedContainsProperly_r: [
807
909
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
808
910
  :char, :pointer, :pointer, :pointer
809
911
  ],
810
912
 
811
- :GEOSPreparedCoveredBy_r => [
913
+ GEOSPreparedCoveredBy_r: [
812
914
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
813
915
  :char, :pointer, :pointer, :pointer
814
916
  ],
815
917
 
816
- :GEOSPreparedCovers_r => [
918
+ GEOSPreparedCovers_r: [
817
919
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
818
920
  :char, :pointer, :pointer, :pointer
819
921
  ],
820
922
 
821
- :GEOSPreparedCrosses_r => [
923
+ GEOSPreparedCrosses_r: [
822
924
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
823
925
  :char, :pointer, :pointer, :pointer
824
926
  ],
825
927
 
826
- :GEOSPreparedDisjoint_r => [
928
+ GEOSPreparedDisjoint_r: [
827
929
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
828
930
  :char, :pointer, :pointer, :pointer
829
931
  ],
830
932
 
831
- :GEOSPreparedIntersects_r => [
933
+ GEOSPreparedIntersects_r: [
832
934
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
833
935
  :char, :pointer, :pointer, :pointer
834
936
  ],
835
937
 
836
- :GEOSPreparedOverlaps_r => [
938
+ GEOSPreparedOverlaps_r: [
837
939
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
838
940
  :char, :pointer, :pointer, :pointer
839
941
  ],
840
942
 
841
- :GEOSPreparedTouches_r => [
943
+ GEOSPreparedTouches_r: [
842
944
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
843
945
  :char, :pointer, :pointer, :pointer
844
946
  ],
845
947
 
846
- :GEOSPreparedWithin_r => [
948
+ GEOSPreparedWithin_r: [
847
949
  # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
848
950
  :char, :pointer, :pointer, :pointer
849
951
  ],
850
952
  #### /PreparedGeometry functions ####
851
953
 
852
954
  #### WktReader functions ####
853
- :GEOSWKTReader_create_r => [
955
+ GEOSWKTReader_create_r: [
854
956
  # *wktr, *handle
855
957
  :pointer, :pointer
856
958
  ],
857
959
 
858
- :GEOSWKTReader_read_r => [
960
+ GEOSWKTReader_read_r: [
859
961
  # *geom, *handle, *wktr, string
860
962
  :pointer, :pointer, :pointer, :string
861
963
  ],
862
964
 
863
- :GEOSWKTReader_destroy_r => [
965
+ GEOSWKTReader_destroy_r: [
864
966
  # void, *handle, *wktr
865
967
  :void, :pointer, :pointer
866
968
  ],
867
969
  #### /WktReader functions ###
868
970
 
869
971
  #### WktWriter functions ####
870
- :GEOSWKTWriter_create_r => [
972
+ GEOSWKTWriter_create_r: [
871
973
  # *wktw, *handle
872
974
  :pointer, :pointer
873
975
  ],
874
976
 
875
- :GEOSWKTWriter_write_r => [
977
+ GEOSWKTWriter_write_r: [
876
978
  # string, *handle, *wktw, *geom
877
979
  :string, :pointer, :pointer, :pointer
878
980
  ],
879
981
 
880
- :GEOSWKTWriter_destroy_r => [
982
+ GEOSWKTWriter_destroy_r: [
881
983
  # void, *handle, *wktw
882
984
  :void, :pointer, :pointer
883
985
  ],
884
986
 
885
- :GEOSWKTWriter_setTrim_r => [
987
+ GEOSWKTWriter_setTrim_r: [
886
988
  # void, *handle, *wktw, bool
887
989
  :void, :pointer, :pointer, :char
888
990
  ],
889
991
 
890
- :GEOSWKTWriter_setRoundingPrecision_r => [
992
+ GEOSWKTWriter_setRoundingPrecision_r: [
891
993
  # void, *handle, *wktw, precision
892
994
  :void, :pointer, :pointer, :int
893
995
  ],
894
996
 
895
- :GEOSWKTWriter_setOutputDimension_r => [
997
+ GEOSWKTWriter_setOutputDimension_r: [
896
998
  # void, *handle, *wktw, dimensions
897
999
  :void, :pointer, :pointer, :int
898
1000
  ],
899
1001
 
900
- :GEOSWKTWriter_getOutputDimension_r => [
1002
+ GEOSWKTWriter_getOutputDimension_r: [
901
1003
  # dimensions, *handle, *wktw
902
1004
  :int, :pointer, :pointer
903
1005
  ],
904
1006
 
905
- :GEOSWKTWriter_setOld3D_r => [
1007
+ GEOSWKTWriter_setOld3D_r: [
906
1008
  # void, *handle, *wktw, bool
907
1009
  :void, :pointer, :pointer, :int
908
1010
  ],
909
1011
  #### /WktWriter functions ####
910
1012
 
911
1013
  #### WkbReader functions ####
912
- :GEOSWKBReader_create_r => [
1014
+ GEOSWKBReader_create_r: [
913
1015
  # *wkbr, *handle
914
1016
  :pointer, :pointer
915
1017
  ],
916
1018
 
917
- :GEOSWKBReader_destroy_r => [
1019
+ GEOSWKBReader_destroy_r: [
918
1020
  # void, *handle, *wkbr
919
1021
  :void, :pointer, :pointer
920
1022
  ],
921
1023
 
922
- :GEOSWKBReader_read_r => [
1024
+ GEOSWKBReader_read_r: [
923
1025
  # *geom, *handle, *wkbr, (unsigned char *) string, size_t
924
1026
  :pointer, :pointer, :pointer, :pointer, :size_t
925
1027
  ],
926
1028
 
927
- :GEOSWKBReader_readHEX_r => [
1029
+ GEOSWKBReader_readHEX_r: [
928
1030
  # *geom, *handle, *wkbr, string, size_t
929
1031
  :pointer, :pointer, :pointer, :string, :size_t
930
1032
  ],
931
1033
  #### /WkbReader functions ####
932
1034
 
933
1035
  #### WkbWriter functions ####
934
- :GEOSWKBWriter_create_r => [
1036
+ GEOSWKBWriter_create_r: [
935
1037
  # *wkbw, *handle
936
1038
  :pointer, :pointer
937
1039
  ],
938
1040
 
939
- :GEOSWKBWriter_destroy_r => [
1041
+ GEOSWKBWriter_destroy_r: [
940
1042
  # void, *handle, *wkbw
941
1043
  :void, :pointer, :pointer
942
1044
  ],
943
1045
 
944
- :GEOSWKBWriter_write_r => [
1046
+ GEOSWKBWriter_write_r: [
945
1047
  # (unsigned char *) string, *handle, *wkbw, *geom, *size_t
946
1048
  :pointer, :pointer, :pointer, :pointer, :pointer
947
1049
  ],
948
1050
 
949
- :GEOSWKBWriter_writeHEX_r => [
1051
+ GEOSWKBWriter_writeHEX_r: [
950
1052
  # (unsigned char *) string, *handle, *wkbw, *geom, *size_t
951
1053
  :pointer, :pointer, :pointer, :pointer, :pointer
952
1054
  ],
953
1055
 
954
- :GEOSWKBWriter_setOutputDimension_r => [
1056
+ GEOSWKBWriter_setOutputDimension_r: [
955
1057
  # void, *handle, *wkbw, dimensions
956
1058
  :void, :pointer, :pointer, :int
957
1059
  ],
958
1060
 
959
- :GEOSWKBWriter_getOutputDimension_r => [
1061
+ GEOSWKBWriter_getOutputDimension_r: [
960
1062
  # dimensions, *handle, *wkbw
961
1063
  :int, :pointer, :pointer
962
1064
  ],
963
1065
 
964
- :GEOSWKBWriter_getByteOrder_r => [
1066
+ GEOSWKBWriter_getByteOrder_r: [
965
1067
  # byte_order, *handle, *wkbw
966
1068
  :byte_order, :pointer, :pointer
967
1069
  ],
968
1070
 
969
- :GEOSWKBWriter_setByteOrder_r => [
1071
+ GEOSWKBWriter_setByteOrder_r: [
970
1072
  # void, *handle, *wkbw, byte_order
971
1073
  :void, :pointer, :pointer, :byte_order
972
1074
  ],
973
1075
 
974
- :GEOSWKBWriter_getIncludeSRID_r => [
1076
+ GEOSWKBWriter_getIncludeSRID_r: [
975
1077
  # bool, *handle, *geom
976
1078
  :char, :pointer, :pointer
977
1079
  ],
978
1080
 
979
- :GEOSWKBWriter_setIncludeSRID_r => [
1081
+ GEOSWKBWriter_setIncludeSRID_r: [
980
1082
  # void, *handle, *geom, bool
981
1083
  :void, :pointer, :pointer, :char
982
1084
  ],
983
1085
  #### /WkbWriter functions ####
984
1086
 
985
-
986
1087
  #### Linearref functions ####
987
- :GEOSProject_r => [
1088
+ GEOSProject_r: [
988
1089
  # distance, *handle, *geom_a, *geom_b
989
1090
  :double, :pointer, :pointer, :pointer
990
1091
  ],
991
1092
 
992
- :GEOSProjectNormalized_r => [
1093
+ GEOSProjectNormalized_r: [
993
1094
  # distance, *handle, *geom_a, *geom_b
994
1095
  :double, :pointer, :pointer, :pointer
995
1096
  ],
996
1097
 
997
- :GEOSInterpolate_r => [
1098
+ GEOSInterpolate_r: [
998
1099
  # *geom, *handle, *geom, distance
999
1100
  :pointer, :pointer, :pointer, :double
1000
1101
  ],
1001
1102
 
1002
- :GEOSInterpolateNormalized_r => [
1103
+ GEOSInterpolateNormalized_r: [
1003
1104
  # *geom, *handle, *geom, distance
1004
1105
  :pointer, :pointer, :pointer, :double
1005
1106
  ],
1006
1107
  #### /Linearref functions ####
1007
1108
 
1008
1109
  #### BufferParams functions ####
1009
- :GEOSBufferParams_create_r => [
1110
+ GEOSBufferParams_create_r: [
1010
1111
  # GEOSBufferParams*, *handle
1011
1112
  :pointer, :pointer
1012
1113
  ],
1013
1114
 
1014
- :GEOSBufferParams_destroy_r => [
1115
+ GEOSBufferParams_destroy_r: [
1015
1116
  # void, *handle, *params
1016
1117
  :void, :pointer, :pointer
1017
1118
  ],
1018
1119
 
1019
- :GEOSBufferParams_setEndCapStyle_r => [
1120
+ GEOSBufferParams_setEndCapStyle_r: [
1020
1121
  # 0 on exception, *handle, *params, style
1021
1122
  :int, :pointer, :pointer, :buffer_cap_style
1022
1123
  ],
1023
1124
 
1024
- :GEOSBufferParams_setJoinStyle_r => [
1125
+ GEOSBufferParams_setJoinStyle_r: [
1025
1126
  # 0 on exception, *handle, *params, style
1026
1127
  :int, :pointer, :pointer, :buffer_join_style
1027
1128
  ],
1028
1129
 
1029
- :GEOSBufferParams_setMitreLimit_r => [
1130
+ GEOSBufferParams_setMitreLimit_r: [
1030
1131
  # 0 on exception, *handle, *params, mitre_limit
1031
1132
  :int, :pointer, :pointer, :double
1032
1133
  ],
1033
1134
 
1034
- :GEOSBufferParams_setQuadrantSegments_r => [
1135
+ GEOSBufferParams_setQuadrantSegments_r: [
1035
1136
  # 0 on exception, *handle, *params, quad_segs
1036
1137
  :int, :pointer, :pointer, :int
1037
1138
  ],
1038
1139
 
1039
- :GEOSBufferParams_setSingleSided_r => [
1140
+ GEOSBufferParams_setSingleSided_r: [
1040
1141
  # 0 on exception, *handle, *params, bool
1041
1142
  :int, :pointer, :pointer, :int
1042
1143
  ],
@@ -1046,21 +1147,21 @@ module Geos
1046
1147
  # -1 if reaching P takes a counter-clockwise (left) turn
1047
1148
  # 1 if reaching P takes a clockwise (right) turn
1048
1149
  # 0 if P is collinear with A-B
1049
- :GEOSOrientationIndex_r => [
1150
+ GEOSOrientationIndex_r: [
1050
1151
  # int, *handle, Ax, Ay, Bx, By, Px, Py
1051
1152
  :int, :pointer, :double, :double, :double, :double, :double, :double
1052
1153
  ]
1053
1154
  #### /Algorithms ####
1054
- }
1155
+ }.freeze
1055
1156
 
1056
1157
  begin
1057
1158
  ffi_lib(geos_library_path)
1058
1159
 
1059
- FFI_LAYOUT.each do |fun, ary|
1160
+ FFI_LAYOUT.each do |func, ary|
1060
1161
  ret = ary.shift
1061
1162
  begin
1062
- self.class_eval do
1063
- attach_function(fun, ary, ret)
1163
+ class_eval do
1164
+ attach_function(func, ary, ret)
1064
1165
  end
1065
1166
  rescue FFI::NotFoundError
1066
1167
  # that's okay
@@ -1069,9 +1170,8 @@ module Geos
1069
1170
 
1070
1171
  # Checks to see if we actually have the GEOS library loaded.
1071
1172
  FFIGeos.GEOSversion
1072
-
1073
1173
  rescue LoadError, NoMethodError
1074
- raise LoadError.new("Couldn't load the GEOS CAPI library.")
1174
+ raise LoadError, "Couldn't load the GEOS CAPI library."
1075
1175
  end
1076
1176
  end
1077
1177
 
@@ -1093,13 +1193,11 @@ module Geos
1093
1193
  def notice_handler=(method_or_block)
1094
1194
  @notice_handler = method_or_block
1095
1195
  FFIGeos.GEOSContext_setNoticeMessageHandler_r(@ptr, @notice_handler, nil)
1096
- @notice_handler
1097
1196
  end
1098
1197
 
1099
1198
  def error_handler=(method_or_block)
1100
1199
  @error_handler = method_or_block
1101
1200
  FFIGeos.GEOSContext_setErrorMessageHandler_r(@ptr, @error_handler, nil)
1102
- @error_handler
1103
1201
  end
1104
1202
 
1105
1203
  def notice_handler(&block)
@@ -1113,11 +1211,11 @@ module Geos
1113
1211
  end
1114
1212
 
1115
1213
  def reset_notice_handler
1116
- self.notice_handler = self.method(:default_notice_handler)
1214
+ self.notice_handler = method(:default_notice_handler)
1117
1215
  end
1118
1216
 
1119
1217
  def reset_error_handler
1120
- self.error_handler = self.method(:default_error_handler)
1218
+ self.error_handler = method(:default_error_handler)
1121
1219
  end
1122
1220
 
1123
1221
  # Deprecated initialization and teardown...
@@ -1125,8 +1223,8 @@ module Geos
1125
1223
  def initialize
1126
1224
  @ptr = FFI::AutoPointer.new(
1127
1225
  FFIGeos.initGEOS_r(
1128
- @notice_handler = self.method(:default_notice_handler),
1129
- @error_handler = self.method(:default_error_handler)
1226
+ @notice_handler = method(:default_notice_handler),
1227
+ @error_handler = method(:default_error_handler)
1130
1228
  ),
1131
1229
  self.class.method(:release)
1132
1230
  )
@@ -1136,28 +1234,25 @@ module Geos
1136
1234
  FFIGeos.finishGEOS_r(ptr)
1137
1235
  end
1138
1236
 
1139
- def notice_handler
1140
- @notice_handler
1141
- end
1237
+ attr_reader :notice_handler
1142
1238
 
1143
- def error_handler
1144
- @error_handler
1145
- end
1239
+ attr_reader :error_handler
1146
1240
  end
1147
1241
 
1148
1242
  private
1243
+
1149
1244
  def default_notice_handler(*args)
1150
1245
  # no-op
1151
1246
  end
1152
1247
 
1153
1248
  def default_error_handler(*args)
1154
- raise Geos::GEOSException.new(args[0] % args[1])
1249
+ raise Geos::GEOSException, args[0] % args[1]
1155
1250
  end
1156
1251
  end
1157
1252
 
1158
1253
  class << self
1159
1254
  def version
1160
- @version ||= FFIGeos.GEOSversion
1255
+ @version ||= FFIGeos.GEOSversion.strip
1161
1256
  end
1162
1257
 
1163
1258
  def jts_port
@@ -1202,7 +1297,7 @@ module Geos
1202
1297
  elsif Geos::Constants::SRID_COPY_POLICIES.include?(policy)
1203
1298
  Thread.current[:ffi_geos_srid_copy_policy] = policy
1204
1299
  else
1205
- raise ArgumentError.new("Invalid SRID policy #{policy} (must be one of #{Geos::Constants::SRID_COPY_POLICIES})")
1300
+ raise ArgumentError, "Invalid SRID policy #{policy} (must be one of #{Geos::Constants::SRID_COPY_POLICIES})"
1206
1301
  end
1207
1302
  end
1208
1303
 
@@ -1216,7 +1311,7 @@ module Geos
1216
1311
  elsif Geos::Constants::SRID_COPY_POLICIES.include?(policy)
1217
1312
  @srid_copy_policy_default = policy
1218
1313
  else
1219
- raise ArgumentError.new("Invalid SRID policy #{policy} (must be one of #{Geos::Constants::SRID_COPY_POLICIES})")
1314
+ raise ArgumentError, "Invalid SRID policy #{policy} (must be one of #{Geos::Constants::SRID_COPY_POLICIES})"
1220
1315
  end
1221
1316
  end
1222
1317
 
@@ -1241,11 +1336,11 @@ module Geos
1241
1336
  create_empty_collection
1242
1337
  create_empty_linear_ring
1243
1338
  }.each do |m|
1244
- self.class_eval(<<-EOF, __FILE__, __LINE__ + 1)
1339
+ class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
1245
1340
  def #{m}(*args)
1246
1341
  Geos::Utils.#{m}(*args)
1247
1342
  end
1248
- EOF
1343
+ RUBY
1249
1344
  end
1250
1345
  end
1251
1346
 
@@ -1268,38 +1363,38 @@ module Geos
1268
1363
  GEOS_CAPI_VERSION,
1269
1364
  GEOS_CAPI_VERSION_MAJOR, GEOS_CAPI_VERSION_MINOR, GEOS_CAPI_VERSION_PATCH,
1270
1365
  GEOS_SVN_REVISION =
1271
- if !(versions = Geos.version.scan(/^
1272
- ((\d+)\.(\d+)\.(\d+)((?:dev|rc|beta|alpha)\d*)?)
1273
- -CAPI-
1274
- ((\d+)\.(\d+)\.(\d+))
1275
- (?:\s+r(\d+))?
1276
- $/x)).empty?
1277
- versions = versions[0]
1278
- [
1279
- versions[0],
1280
- versions[1].to_i,
1281
- versions[2].to_i,
1282
- versions[3].to_i,
1283
- versions[4],
1284
- versions[5],
1285
- versions[6].to_i,
1286
- versions[7].to_i,
1287
- versions[8].to_i,
1288
- (versions[9].to_i if versions[9])
1289
- ]
1290
- else
1291
- [ '0.0.0', 0, 0, 0, nil, '0.0.0', 0, 0, 0 ]
1292
- end
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
+ versions = versions[0]
1373
+ [
1374
+ versions[0],
1375
+ versions[1].to_i,
1376
+ versions[2].to_i,
1377
+ versions[3].to_i,
1378
+ versions[4],
1379
+ versions[5],
1380
+ versions[6].to_i,
1381
+ versions[7].to_i,
1382
+ versions[8].to_i,
1383
+ versions[9]&.to_i
1384
+ ]
1385
+ else
1386
+ ['0.0.0', 0, 0, 0, nil, '0.0.0', 0, 0, 0]
1387
+ end
1293
1388
  GEOS_CAPI_FIRST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i
1294
1389
  GEOS_CAPI_LAST_INTERFACE = GEOS_CAPI_VERSION_MAJOR.to_i + GEOS_CAPI_VERSION_MINOR.to_i
1295
1390
  end
1296
1391
 
1297
1392
  module Constants
1298
1393
  BUFFER_PARAM_DEFAULTS = {
1299
- :quad_segs => 8,
1300
- :endcap => :round,
1301
- :join => :round,
1302
- :mitre_limit => 5.0
1394
+ quad_segs: 8,
1395
+ endcap: :round,
1396
+ join: :round,
1397
+ mitre_limit: 5.0
1303
1398
  }.freeze
1304
1399
 
1305
1400
  SRID_COPY_POLICIES = [
@@ -1317,7 +1412,7 @@ module Geos
1317
1412
 
1318
1413
  class IndexBoundsError < Error
1319
1414
  def initialize(*)
1320
- super("Index out of bounds")
1415
+ super('Index out of bounds')
1321
1416
  end
1322
1417
  end
1323
1418
 
@@ -1330,6 +1425,9 @@ module Geos
1330
1425
  class ParseError < Error
1331
1426
  end
1332
1427
 
1428
+ class InvalidGeometryError < Error
1429
+ end
1430
+
1333
1431
  include GeomTypes
1334
1432
  include VersionConstants
1335
1433
  end