ffi-geos 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -5
  3. data/MIT-LICENSE +1 -1
  4. data/lib/ffi-geos.rb +90 -8
  5. data/lib/ffi-geos/buffer_params.rb +8 -7
  6. data/lib/ffi-geos/coordinate_sequence.rb +14 -13
  7. data/lib/ffi-geos/geometry.rb +120 -71
  8. data/lib/ffi-geos/geometry_collection.rb +2 -1
  9. data/lib/ffi-geos/interrupt.rb +2 -0
  10. data/lib/ffi-geos/line_string.rb +5 -4
  11. data/lib/ffi-geos/linear_ring.rb +1 -0
  12. data/lib/ffi-geos/multi_line_string.rb +2 -1
  13. data/lib/ffi-geos/multi_point.rb +1 -0
  14. data/lib/ffi-geos/multi_polygon.rb +1 -0
  15. data/lib/ffi-geos/point.rb +4 -3
  16. data/lib/ffi-geos/polygon.rb +4 -3
  17. data/lib/ffi-geos/prepared_geometry.rb +13 -12
  18. data/lib/ffi-geos/strtree.rb +61 -13
  19. data/lib/ffi-geos/tools.rb +2 -1
  20. data/lib/ffi-geos/utils.rb +12 -11
  21. data/lib/ffi-geos/version.rb +2 -1
  22. data/lib/ffi-geos/wkb_reader.rb +5 -4
  23. data/lib/ffi-geos/wkb_writer.rb +11 -10
  24. data/lib/ffi-geos/wkt_reader.rb +4 -3
  25. data/lib/ffi-geos/wkt_writer.rb +9 -8
  26. data/test/coordinate_sequence_tests.rb +1 -0
  27. data/test/geometry_collection_tests.rb +1 -0
  28. data/test/geometry_tests.rb +88 -0
  29. data/test/interrupt_tests.rb +1 -0
  30. data/test/line_string_tests.rb +1 -0
  31. data/test/linear_ring_tests.rb +1 -0
  32. data/test/misc_tests.rb +99 -0
  33. data/test/multi_line_string_tests.rb +1 -0
  34. data/test/point_tests.rb +1 -0
  35. data/test/polygon_tests.rb +1 -0
  36. data/test/prepared_geometry_tests.rb +1 -0
  37. data/test/strtree_tests.rb +143 -2
  38. data/test/test_helper.rb +8 -2
  39. data/test/tools_tests.rb +1 -0
  40. data/test/utils_tests.rb +1 -0
  41. data/test/wkb_reader_tests.rb +1 -0
  42. data/test/wkb_writer_tests.rb +3 -4
  43. data/test/wkt_reader_tests.rb +1 -0
  44. data/test/wkt_writer_tests.rb +1 -0
  45. metadata +9 -9
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class GeometryCollection < Geometry
@@ -22,7 +23,7 @@ module Geos
22
23
  if n < 0 || n >= self.num_geometries
23
24
  nil
24
25
  else
25
- cast_geometry_ptr(FFIGeos.GEOSGetGeometryN_r(Geos.current_handle, self.ptr, n), :auto_free => false)
26
+ cast_geometry_ptr(FFIGeos.GEOSGetGeometryN_r(Geos.current_handle_pointer, self.ptr, n), :auto_free => false)
26
27
  end
27
28
  end
28
29
  alias_method :geometry_n, :get_geometry_n
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
1
3
 
2
4
  module Geos
3
5
  module Interrupt
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class LineString < Geometry
@@ -19,7 +20,7 @@ module Geos
19
20
 
20
21
  if FFIGeos.respond_to?(:GEOSGeomGetNumPoints_r)
21
22
  def num_points
22
- FFIGeos.GEOSGeomGetNumPoints_r(Geos.current_handle, self.ptr)
23
+ FFIGeos.GEOSGeomGetNumPoints_r(Geos.current_handle_pointer, self.ptr)
23
24
  end
24
25
  else
25
26
  def num_points
@@ -32,7 +33,7 @@ module Geos
32
33
  raise Geos::IndexBoundsError.new
33
34
  else
34
35
  cast_geometry_ptr(
35
- FFIGeos.GEOSGeomGetPointN_r(Geos.current_handle, self.ptr, n), {
36
+ FFIGeos.GEOSGeomGetPointN_r(Geos.current_handle_pointer, self.ptr, n), {
36
37
  :srid_copy => self.srid
37
38
  }
38
39
  )
@@ -52,7 +53,7 @@ module Geos
52
53
  options = Constants::BUFFER_PARAM_DEFAULTS.merge(options)
53
54
 
54
55
  cast_geometry_ptr(FFIGeos.GEOSOffsetCurve_r(
55
- Geos.current_handle,
56
+ Geos.current_handle_pointer,
56
57
  self.ptr,
57
58
  width,
58
59
  options[:quad_segs],
@@ -65,7 +66,7 @@ module Geos
65
66
 
66
67
  if FFIGeos.respond_to?(:GEOSisClosed_r)
67
68
  def closed?
68
- bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle, self.ptr))
69
+ bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle_pointer, self.ptr))
69
70
  end
70
71
  end
71
72
 
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class LinearRing < LineString
@@ -1,11 +1,12 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class MultiLineString < GeometryCollection
5
6
  if FFIGeos.respond_to?(:GEOSisClosed_r) && Geos::GEOS_VERSION >= '3.5.0'
6
7
  # Available in GEOS 3.5.0+.
7
8
  def closed?
8
- bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle, self.ptr))
9
+ bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle_pointer, self.ptr))
9
10
  end
10
11
  end
11
12
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class MultiPoint < GeometryCollection
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class MultiPolygon < GeometryCollection
@@ -1,11 +1,12 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class Point < Geometry
5
6
  if FFIGeos.respond_to?(:GEOSGeomGetX_r)
6
7
  def get_x
7
8
  double_ptr = FFI::MemoryPointer.new(:double)
8
- FFIGeos.GEOSGeomGetX_r(Geos.current_handle, self.ptr, double_ptr)
9
+ FFIGeos.GEOSGeomGetX_r(Geos.current_handle_pointer, self.ptr, double_ptr)
9
10
  double_ptr.read_double
10
11
  end
11
12
  else
@@ -18,7 +19,7 @@ module Geos
18
19
  if FFIGeos.respond_to?(:GEOSGeomGetY_r)
19
20
  def get_y
20
21
  double_ptr = FFI::MemoryPointer.new(:double)
21
- FFIGeos.GEOSGeomGetY_r(Geos.current_handle, self.ptr, double_ptr)
22
+ FFIGeos.GEOSGeomGetY_r(Geos.current_handle_pointer, self.ptr, double_ptr)
22
23
  double_ptr.read_double
23
24
  end
24
25
  else
@@ -31,7 +32,7 @@ module Geos
31
32
  if FFIGeos.respond_to?(:GEOSGeomGetZ_r)
32
33
  def get_z
33
34
  double_ptr = FFI::MemoryPointer.new(:double)
34
- FFIGeos.GEOSGeomGetZ_r(Geos.current_handle, self.ptr, double_ptr)
35
+ FFIGeos.GEOSGeomGetZ_r(Geos.current_handle_pointer, self.ptr, double_ptr)
35
36
  double_ptr.read_double
36
37
  end
37
38
  else
@@ -1,9 +1,10 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class Polygon < Geometry
5
6
  def num_interior_rings
6
- FFIGeos.GEOSGetNumInteriorRings_r(Geos.current_handle, self.ptr)
7
+ FFIGeos.GEOSGetNumInteriorRings_r(Geos.current_handle_pointer, self.ptr)
7
8
  end
8
9
 
9
10
  def interior_ring_n(n)
@@ -11,7 +12,7 @@ module Geos
11
12
  raise Geos::IndexBoundsError.new
12
13
  else
13
14
  cast_geometry_ptr(
14
- FFIGeos.GEOSGetInteriorRingN_r(Geos.current_handle, self.ptr, n), {
15
+ FFIGeos.GEOSGetInteriorRingN_r(Geos.current_handle_pointer, self.ptr, n), {
15
16
  :auto_free => false,
16
17
  :srid_copy => self.srid,
17
18
  :parent => self
@@ -23,7 +24,7 @@ module Geos
23
24
 
24
25
  def exterior_ring
25
26
  cast_geometry_ptr(
26
- FFIGeos.GEOSGetExteriorRing_r(Geos.current_handle, self.ptr), {
27
+ FFIGeos.GEOSGetExteriorRing_r(Geos.current_handle_pointer, self.ptr), {
27
28
  :auto_free => false,
28
29
  :srid_copy => self.srid,
29
30
  :parent => self
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class PreparedGeometry
@@ -16,7 +17,7 @@ module Geos
16
17
  }.merge(options)
17
18
 
18
19
  @ptr = FFI::AutoPointer.new(
19
- FFIGeos.GEOSPrepare_r(Geos.current_handle, geom.ptr),
20
+ FFIGeos.GEOSPrepare_r(Geos.current_handle_pointer, geom.ptr),
20
21
  self.class.method(:release)
21
22
  )
22
23
  @geometry = geom
@@ -25,57 +26,57 @@ module Geos
25
26
  end
26
27
 
27
28
  def self.release(ptr) #:nodoc:
28
- FFIGeos.GEOSPreparedGeom_destroy_r(Geos.current_handle, ptr)
29
+ FFIGeos.GEOSPreparedGeom_destroy_r(Geos.current_handle_pointer, ptr)
29
30
  end
30
31
 
31
32
  def contains?(geom)
32
33
  check_geometry(geom)
33
- bool_result(FFIGeos.GEOSPreparedContains_r(Geos.current_handle, self.ptr, geom.ptr))
34
+ bool_result(FFIGeos.GEOSPreparedContains_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
34
35
  end
35
36
 
36
37
  def contains_properly?(geom)
37
38
  check_geometry(geom)
38
- bool_result(FFIGeos.GEOSPreparedContainsProperly_r(Geos.current_handle, self.ptr, geom.ptr))
39
+ bool_result(FFIGeos.GEOSPreparedContainsProperly_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
39
40
  end
40
41
 
41
42
  def covered_by?(geom)
42
43
  check_geometry(geom)
43
- bool_result(FFIGeos.GEOSPreparedCoveredBy_r(Geos.current_handle, self.ptr, geom.ptr))
44
+ bool_result(FFIGeos.GEOSPreparedCoveredBy_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
44
45
  end
45
46
 
46
47
  def covers?(geom)
47
48
  check_geometry(geom)
48
- bool_result(FFIGeos.GEOSPreparedCovers_r(Geos.current_handle, self.ptr, geom.ptr))
49
+ bool_result(FFIGeos.GEOSPreparedCovers_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
49
50
  end
50
51
 
51
52
  def crosses?(geom)
52
53
  check_geometry(geom)
53
- bool_result(FFIGeos.GEOSPreparedCrosses_r(Geos.current_handle, self.ptr, geom.ptr))
54
+ bool_result(FFIGeos.GEOSPreparedCrosses_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
54
55
  end
55
56
 
56
57
  def disjoint?(geom)
57
58
  check_geometry(geom)
58
- bool_result(FFIGeos.GEOSPreparedDisjoint_r(Geos.current_handle, self.ptr, geom.ptr))
59
+ bool_result(FFIGeos.GEOSPreparedDisjoint_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
59
60
  end
60
61
 
61
62
  def intersects?(geom)
62
63
  check_geometry(geom)
63
- bool_result(FFIGeos.GEOSPreparedIntersects_r(Geos.current_handle, self.ptr, geom.ptr))
64
+ bool_result(FFIGeos.GEOSPreparedIntersects_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
64
65
  end
65
66
 
66
67
  def overlaps?(geom)
67
68
  check_geometry(geom)
68
- bool_result(FFIGeos.GEOSPreparedOverlaps_r(Geos.current_handle, self.ptr, geom.ptr))
69
+ bool_result(FFIGeos.GEOSPreparedOverlaps_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
69
70
  end
70
71
 
71
72
  def touches?(geom)
72
73
  check_geometry(geom)
73
- bool_result(FFIGeos.GEOSPreparedTouches_r(Geos.current_handle, self.ptr, geom.ptr))
74
+ bool_result(FFIGeos.GEOSPreparedTouches_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
74
75
  end
75
76
 
76
77
  def within?(geom)
77
78
  check_geometry(geom)
78
- bool_result(FFIGeos.GEOSPreparedWithin_r(Geos.current_handle, self.ptr, geom.ptr))
79
+ bool_result(FFIGeos.GEOSPreparedWithin_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
79
80
  end
80
81
  end
81
82
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class STRtree
@@ -21,10 +22,11 @@ module Geos
21
22
  #
22
23
  def initialize(*args)
23
24
  geoms_and_objects = nil # forward declaration
25
+ capacity = 10
24
26
 
25
- capacity = if args.length == 1 && args.first.is_a?(Fixnum)
26
- args.first
27
- else
27
+ if args.first.is_a?(Integer)
28
+ capacity = args.first
29
+ elsif args.first.is_a?(Array)
28
30
  geoms_and_objects = if args.first.first.is_a?(Array)
29
31
  args.first
30
32
  else
@@ -34,15 +36,13 @@ module Geos
34
36
  geoms_and_objects.each do |geom, obj|
35
37
  check_geometry(geom)
36
38
  end
37
-
38
- geoms_and_objects.length
39
39
  end
40
40
 
41
41
  if capacity <= 0
42
42
  raise ArgumentError.new("STRtree capacity must be greater than 0")
43
43
  end
44
44
 
45
- ptr = FFIGeos.GEOSSTRtree_create_r(Geos.current_handle, capacity)
45
+ ptr = FFIGeos.GEOSSTRtree_create_r(Geos.current_handle_pointer, capacity)
46
46
 
47
47
  @ptr = FFI::AutoPointer.new(
48
48
  ptr,
@@ -63,19 +63,23 @@ module Geos
63
63
  end
64
64
 
65
65
  def self.release(ptr) #:nodoc:
66
- FFIGeos.GEOSSTRtree_destroy_r(Geos.current_handle, ptr)
66
+ FFIGeos.GEOSSTRtree_destroy_r(Geos.current_handle_pointer, ptr)
67
67
  end
68
68
 
69
69
  def built?
70
70
  @built
71
71
  end
72
72
 
73
+ def built!
74
+ @built = true
75
+ end
76
+
73
77
  def next_key
74
78
  @storage_key += 1
75
79
  end
76
80
  private :next_key
77
81
 
78
- def insert(geom, item)
82
+ def insert(geom, item = nil)
79
83
  if self.built?
80
84
  raise AlreadyBuiltError.new
81
85
  else
@@ -91,7 +95,7 @@ module Geos
91
95
  }
92
96
  @ptrs[key] = key_ptr
93
97
 
94
- FFIGeos.GEOSSTRtree_insert_r(Geos.current_handle, self.ptr, geom.ptr, key_ptr)
98
+ FFIGeos.GEOSSTRtree_insert_r(Geos.current_handle_pointer, self.ptr, geom.ptr, key_ptr)
95
99
  end
96
100
  end
97
101
 
@@ -104,8 +108,8 @@ module Geos
104
108
 
105
109
  if key
106
110
  key_ptr = @ptrs[key]
107
- result = FFIGeos.GEOSSTRtree_remove_r(Geos.current_handle, self.ptr, geom.ptr, key_ptr)
108
- @built = true
111
+ result = FFIGeos.GEOSSTRtree_remove_r(Geos.current_handle_pointer, self.ptr, geom.ptr, key_ptr)
112
+ built!
109
113
 
110
114
  if result == 1
111
115
  @storage.delete(key)
@@ -116,7 +120,7 @@ module Geos
116
120
  def query_all(geom)
117
121
  check_geometry(geom)
118
122
 
119
- @built = true
123
+ built!
120
124
  retval = []
121
125
 
122
126
  callback = proc { |*args|
@@ -130,7 +134,7 @@ module Geos
130
134
  }
131
135
 
132
136
  FFIGeos.GEOSSTRtree_query_r(
133
- Geos.current_handle,
137
+ Geos.current_handle_pointer,
134
138
  self.ptr,
135
139
  geom.ptr,
136
140
  callback,
@@ -178,5 +182,49 @@ module Geos
178
182
  yield(v)
179
183
  end
180
184
  end
185
+
186
+ if FFIGeos.respond_to?(:GEOSSTRtree_nearest_generic_r)
187
+ def nearest_generic(geom)
188
+ check_geometry(geom)
189
+
190
+ built!
191
+
192
+ return nil if @storage.empty?
193
+
194
+ callback = proc { |item, _item2, distance_ptr|
195
+ key = item.read_int
196
+ geom_from_storage = @storage[key][:geometry]
197
+
198
+ next 0 if geom_from_storage.empty?
199
+
200
+ distance = geom.distance(geom_from_storage)
201
+ distance_ptr.write_double(distance)
202
+
203
+ next 1
204
+ }
205
+
206
+ key_ptr = FFIGeos.GEOSSTRtree_nearest_generic_r(
207
+ Geos.current_handle_pointer,
208
+ self.ptr,
209
+ geom.ptr,
210
+ geom.envelope.ptr,
211
+ callback,
212
+ nil
213
+ )
214
+
215
+ @storage[key_ptr.read_int] unless key_ptr.null?
216
+ end
217
+
218
+ def nearest(geom)
219
+ item = nearest_generic(geom)
220
+ item[:geometry] if item
221
+ end
222
+ alias_method :nearest_geometry, :nearest
223
+
224
+ def nearest_item(geom)
225
+ item = nearest_generic(geom)
226
+ item[:item] if item
227
+ end
228
+ end
181
229
  end
182
230
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  class NullPointerError < Geos::Error
@@ -31,7 +32,7 @@ module Geos
31
32
  raise Geos::NullPointerError.new
32
33
  end
33
34
 
34
- klass = case FFIGeos.GEOSGeomTypeId_r(Geos.current_handle, geom_ptr)
35
+ klass = case FFIGeos.GEOSGeomTypeId_r(Geos.current_handle_pointer, geom_ptr)
35
36
  when GEOS_POINT
36
37
  Point
37
38
  when GEOS_LINESTRING
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Geos
4
5
  module Utils
@@ -14,7 +15,7 @@ module Geos
14
15
  # Available in GEOS 3.3.0+.
15
16
  def orientation_index(ax, ay, bx, by, px, py)
16
17
  FFIGeos.GEOSOrientationIndex_r(
17
- Geos.current_handle,
18
+ Geos.current_handle_pointer,
18
19
  ax, ay, bx, by, px, py
19
20
  )
20
21
  end
@@ -23,7 +24,7 @@ module Geos
23
24
  if FFIGeos.respond_to?(:GEOSRelatePatternMatch_r)
24
25
  # Available in GEOS 3.3.0+.
25
26
  def relate_match(mat, pat)
26
- bool_result(FFIGeos.GEOSRelatePatternMatch_r(Geos.current_handle, mat, pat))
27
+ bool_result(FFIGeos.GEOSRelatePatternMatch_r(Geos.current_handle_pointer, mat, pat))
27
28
  end
28
29
  end
29
30
 
@@ -49,7 +50,7 @@ module Geos
49
50
  cs_dup = cs.dup
50
51
  cs_dup.ptr.autorelease = false
51
52
 
52
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle, cs_dup.ptr), {
53
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPoint_r(Geos.current_handle_pointer, cs_dup.ptr), {
53
54
  :srid => options[:srid]
54
55
  })
55
56
  end
@@ -64,7 +65,7 @@ module Geos
64
65
  cs_dup = cs.dup
65
66
  cs_dup.ptr.autorelease = false
66
67
 
67
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle, cs_dup.ptr), {
68
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLineString_r(Geos.current_handle_pointer, cs_dup.ptr), {
68
69
  :srid => options[:srid]
69
70
  })
70
71
  end
@@ -78,7 +79,7 @@ module Geos
78
79
 
79
80
  cs.ptr.autorelease = false
80
81
 
81
- cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle, cs.ptr), {
82
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createLinearRing_r(Geos.current_handle_pointer, cs.ptr), {
82
83
  :srid => options[:srid]
83
84
  })
84
85
  end
@@ -102,32 +103,32 @@ module Geos
102
103
  i.ptr.autorelease = false
103
104
  }
104
105
 
105
- cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle, outer_dup.ptr, ary, inner_dups.length), {
106
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createPolygon_r(Geos.current_handle_pointer, outer_dup.ptr, ary, inner_dups.length), {
106
107
  :srid => options[:srid]
107
108
  })
108
109
  end
109
110
 
110
111
  def create_empty_point(options = {})
111
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle), {
112
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPoint_r(Geos.current_handle_pointer), {
112
113
  :srid => options[:srid]
113
114
  })
114
115
  end
115
116
 
116
117
  def create_empty_line_string(options = {})
117
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle), {
118
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyLineString_r(Geos.current_handle_pointer), {
118
119
  :srid => options[:srid]
119
120
  })
120
121
  end
121
122
 
122
123
  def create_empty_polygon(options = {})
123
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle), {
124
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyPolygon_r(Geos.current_handle_pointer), {
124
125
  :srid => options[:srid]
125
126
  })
126
127
  end
127
128
 
128
129
  def create_empty_collection(t, options = {})
129
130
  check_enum_value(Geos::GeometryTypes, t)
130
- cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle, t), {
131
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createEmptyCollection_r(Geos.current_handle_pointer, t), {
131
132
  :srid => options[:srid]
132
133
  })
133
134
  end
@@ -182,7 +183,7 @@ module Geos
182
183
  ary = FFI::MemoryPointer.new(:pointer, geoms.length)
183
184
  ary.write_array_of_pointer(geoms_dups.map(&:ptr))
184
185
 
185
- cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle, t, ary, geoms_dups.length), {
186
+ cast_geometry_ptr(FFIGeos.GEOSGeom_createCollection_r(Geos.current_handle_pointer, t, ary, geoms_dups.length), {
186
187
  :srid => options[:srid]
187
188
  })
188
189
  end