ffi-geos 1.2.0 → 2.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 (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