ffi-geos 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +8 -5
- data/MIT-LICENSE +1 -1
- data/lib/ffi-geos.rb +90 -8
- data/lib/ffi-geos/buffer_params.rb +8 -7
- data/lib/ffi-geos/coordinate_sequence.rb +14 -13
- data/lib/ffi-geos/geometry.rb +120 -71
- data/lib/ffi-geos/geometry_collection.rb +2 -1
- data/lib/ffi-geos/interrupt.rb +2 -0
- data/lib/ffi-geos/line_string.rb +5 -4
- data/lib/ffi-geos/linear_ring.rb +1 -0
- data/lib/ffi-geos/multi_line_string.rb +2 -1
- data/lib/ffi-geos/multi_point.rb +1 -0
- data/lib/ffi-geos/multi_polygon.rb +1 -0
- data/lib/ffi-geos/point.rb +4 -3
- data/lib/ffi-geos/polygon.rb +4 -3
- data/lib/ffi-geos/prepared_geometry.rb +13 -12
- data/lib/ffi-geos/strtree.rb +61 -13
- data/lib/ffi-geos/tools.rb +2 -1
- data/lib/ffi-geos/utils.rb +12 -11
- data/lib/ffi-geos/version.rb +2 -1
- data/lib/ffi-geos/wkb_reader.rb +5 -4
- data/lib/ffi-geos/wkb_writer.rb +11 -10
- data/lib/ffi-geos/wkt_reader.rb +4 -3
- data/lib/ffi-geos/wkt_writer.rb +9 -8
- data/test/coordinate_sequence_tests.rb +1 -0
- data/test/geometry_collection_tests.rb +1 -0
- data/test/geometry_tests.rb +88 -0
- data/test/interrupt_tests.rb +1 -0
- data/test/line_string_tests.rb +1 -0
- data/test/linear_ring_tests.rb +1 -0
- data/test/misc_tests.rb +99 -0
- data/test/multi_line_string_tests.rb +1 -0
- data/test/point_tests.rb +1 -0
- data/test/polygon_tests.rb +1 -0
- data/test/prepared_geometry_tests.rb +1 -0
- data/test/strtree_tests.rb +143 -2
- data/test/test_helper.rb +8 -2
- data/test/tools_tests.rb +1 -0
- data/test/utils_tests.rb +1 -0
- data/test/wkb_reader_tests.rb +1 -0
- data/test/wkb_writer_tests.rb +3 -4
- data/test/wkt_reader_tests.rb +1 -0
- data/test/wkt_writer_tests.rb +1 -0
- metadata +9 -9
@@ -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.
|
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
|
data/lib/ffi-geos/interrupt.rb
CHANGED
data/lib/ffi-geos/line_string.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
69
|
+
bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle_pointer, self.ptr))
|
69
70
|
end
|
70
71
|
end
|
71
72
|
|
data/lib/ffi-geos/linear_ring.rb
CHANGED
@@ -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.
|
9
|
+
bool_result(FFIGeos.GEOSisClosed_r(Geos.current_handle_pointer, self.ptr))
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
data/lib/ffi-geos/multi_point.rb
CHANGED
data/lib/ffi-geos/point.rb
CHANGED
@@ -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.
|
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.
|
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.
|
35
|
+
FFIGeos.GEOSGeomGetZ_r(Geos.current_handle_pointer, self.ptr, double_ptr)
|
35
36
|
double_ptr.read_double
|
36
37
|
end
|
37
38
|
else
|
data/lib/ffi-geos/polygon.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
79
|
+
bool_result(FFIGeos.GEOSPreparedWithin_r(Geos.current_handle_pointer, self.ptr, geom.ptr))
|
79
80
|
end
|
80
81
|
end
|
81
82
|
end
|
data/lib/ffi-geos/strtree.rb
CHANGED
@@ -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
|
-
|
26
|
-
args.first
|
27
|
-
|
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.
|
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.
|
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.
|
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.
|
108
|
-
|
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
|
-
|
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.
|
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
|
data/lib/ffi-geos/tools.rb
CHANGED
@@ -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.
|
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
|
data/lib/ffi-geos/utils.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|