rgeo 2.3.1 → 3.0.1
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/.yardopts +6 -0
- data/README.md +23 -14
- data/ext/geos_c_impl/analysis.c +30 -25
- data/ext/geos_c_impl/analysis.h +8 -7
- data/ext/geos_c_impl/coordinates.c +27 -21
- data/ext/geos_c_impl/coordinates.h +5 -2
- data/ext/geos_c_impl/errors.c +19 -10
- data/ext/geos_c_impl/errors.h +11 -4
- data/ext/geos_c_impl/extconf.rb +42 -28
- data/ext/geos_c_impl/factory.c +540 -451
- data/ext/geos_c_impl/factory.h +105 -95
- data/ext/geos_c_impl/geometry.c +593 -387
- data/ext/geos_c_impl/geometry.h +10 -5
- data/ext/geos_c_impl/geometry_collection.c +306 -339
- data/ext/geos_c_impl/geometry_collection.h +6 -20
- data/ext/geos_c_impl/globals.c +169 -0
- data/ext/geos_c_impl/globals.h +46 -0
- data/ext/geos_c_impl/line_string.c +271 -231
- data/ext/geos_c_impl/line_string.h +5 -8
- data/ext/geos_c_impl/main.c +16 -16
- data/ext/geos_c_impl/point.c +65 -67
- data/ext/geos_c_impl/point.h +4 -7
- data/ext/geos_c_impl/polygon.c +137 -135
- data/ext/geos_c_impl/polygon.h +11 -11
- data/ext/geos_c_impl/preface.h +16 -10
- data/ext/geos_c_impl/ruby_more.c +67 -0
- data/ext/geos_c_impl/ruby_more.h +25 -0
- data/lib/rgeo/cartesian/analysis.rb +5 -3
- data/lib/rgeo/cartesian/bounding_box.rb +74 -79
- data/lib/rgeo/cartesian/calculations.rb +64 -33
- data/lib/rgeo/cartesian/factory.rb +57 -102
- data/lib/rgeo/cartesian/feature_classes.rb +68 -46
- data/lib/rgeo/cartesian/feature_methods.rb +67 -25
- data/lib/rgeo/cartesian/interface.rb +6 -41
- data/lib/rgeo/cartesian/planar_graph.rb +373 -0
- data/lib/rgeo/cartesian/sweepline_intersector.rb +147 -0
- data/lib/rgeo/cartesian/valid_op.rb +69 -0
- data/lib/rgeo/cartesian.rb +3 -0
- data/lib/rgeo/coord_sys/cs/entities.rb +303 -99
- data/lib/rgeo/coord_sys/cs/factories.rb +0 -2
- data/lib/rgeo/coord_sys/cs/wkt_parser.rb +90 -42
- data/lib/rgeo/coord_sys.rb +1 -20
- data/lib/rgeo/error.rb +15 -0
- data/lib/rgeo/feature/curve.rb +0 -11
- data/lib/rgeo/feature/factory.rb +26 -36
- data/lib/rgeo/feature/factory_generator.rb +6 -14
- data/lib/rgeo/feature/geometry.rb +146 -66
- data/lib/rgeo/feature/geometry_collection.rb +16 -9
- data/lib/rgeo/feature/line_string.rb +4 -5
- data/lib/rgeo/feature/linear_ring.rb +0 -1
- data/lib/rgeo/feature/multi_curve.rb +0 -6
- data/lib/rgeo/feature/multi_surface.rb +3 -4
- data/lib/rgeo/feature/point.rb +4 -5
- data/lib/rgeo/feature/polygon.rb +1 -2
- data/lib/rgeo/feature/surface.rb +3 -4
- data/lib/rgeo/feature/types.rb +69 -85
- data/lib/rgeo/geographic/factory.rb +98 -125
- data/lib/rgeo/geographic/interface.rb +69 -166
- data/lib/rgeo/geographic/projected_feature_classes.rb +21 -9
- data/lib/rgeo/geographic/projected_feature_methods.rb +67 -42
- data/lib/rgeo/geographic/projected_window.rb +36 -22
- data/lib/rgeo/geographic/{proj4_projector.rb → projector.rb} +3 -5
- data/lib/rgeo/geographic/simple_mercator_projector.rb +26 -25
- data/lib/rgeo/geographic/spherical_feature_classes.rb +29 -9
- data/lib/rgeo/geographic/spherical_feature_methods.rb +86 -9
- data/lib/rgeo/geographic/spherical_math.rb +17 -20
- data/lib/rgeo/geographic.rb +1 -1
- data/lib/rgeo/geos/capi_factory.rb +87 -158
- data/lib/rgeo/geos/capi_feature_classes.rb +50 -36
- data/lib/rgeo/geos/ffi_factory.rb +105 -173
- data/lib/rgeo/geos/ffi_feature_classes.rb +34 -10
- data/lib/rgeo/geos/ffi_feature_methods.rb +105 -127
- data/lib/rgeo/geos/interface.rb +20 -59
- data/lib/rgeo/geos/utils.rb +5 -5
- data/lib/rgeo/geos/zm_factory.rb +53 -95
- data/lib/rgeo/geos/zm_feature_methods.rb +30 -33
- data/lib/rgeo/geos.rb +8 -8
- data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +9 -22
- data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -2
- data/lib/rgeo/impl_helper/basic_line_string_methods.rb +28 -56
- data/lib/rgeo/impl_helper/basic_point_methods.rb +2 -14
- data/lib/rgeo/impl_helper/basic_polygon_methods.rb +17 -26
- data/lib/rgeo/impl_helper/utils.rb +21 -0
- data/lib/rgeo/impl_helper/valid_op.rb +350 -0
- data/lib/rgeo/impl_helper/validity_check.rb +139 -0
- data/lib/rgeo/impl_helper.rb +1 -0
- data/lib/rgeo/version.rb +1 -1
- data/lib/rgeo/wkrep/wkb_generator.rb +73 -63
- data/lib/rgeo/wkrep/wkb_parser.rb +33 -31
- data/lib/rgeo/wkrep/wkt_generator.rb +52 -45
- data/lib/rgeo/wkrep/wkt_parser.rb +48 -35
- data/lib/rgeo.rb +1 -3
- metadata +50 -13
- data/lib/rgeo/coord_sys/srs_database/entry.rb +0 -107
- data/lib/rgeo/coord_sys/srs_database/sr_org.rb +0 -64
- data/lib/rgeo/coord_sys/srs_database/url_reader.rb +0 -65
@@ -78,7 +78,6 @@ module RGeo
|
|
78
78
|
# Therefore, if an implementation cannot provide a suitable test for
|
79
79
|
# their equivalence types, they must degrade to use a stronger form
|
80
80
|
# of equivalence.
|
81
|
-
|
82
81
|
module Geometry
|
83
82
|
extend Type
|
84
83
|
|
@@ -90,7 +89,7 @@ module RGeo
|
|
90
89
|
# operations on them.)
|
91
90
|
|
92
91
|
def factory
|
93
|
-
raise Error::UnsupportedOperation, "Method
|
92
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#factory not defined."
|
94
93
|
end
|
95
94
|
|
96
95
|
# === SFS 1.1 Description
|
@@ -105,7 +104,37 @@ module RGeo
|
|
105
104
|
# point geometries, 1 for curves, and 2 for surfaces.
|
106
105
|
|
107
106
|
def dimension
|
108
|
-
raise Error::UnsupportedOperation, "Method
|
107
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#dimension not defined."
|
108
|
+
end
|
109
|
+
|
110
|
+
# === SFS 1.2 Description
|
111
|
+
#
|
112
|
+
# The coordinate dimension is the dimension of direct positions (coordinate tuples) used in
|
113
|
+
# the definition of this geometric object
|
114
|
+
#
|
115
|
+
# === Notes
|
116
|
+
#
|
117
|
+
# Difference between this and dimension is that this is the dimension of the coordinate
|
118
|
+
# not the dimension of the geometry.
|
119
|
+
#
|
120
|
+
# @return [Integer]
|
121
|
+
def coordinate_dimension
|
122
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#coordinate_dimension not defined."
|
123
|
+
end
|
124
|
+
|
125
|
+
# === SFS 1.2 Description
|
126
|
+
#
|
127
|
+
# The spatial dimension is the dimension of the spatial portion of the direct positions
|
128
|
+
# (coordinate tuples) used in the definition of this geometric object. If the direct positions
|
129
|
+
# do not carry a measure coordinate, this will be equal to the coordinate dimension.
|
130
|
+
#
|
131
|
+
# === Notes
|
132
|
+
#
|
133
|
+
# Similar to coordinate_dimension except it will ignore the M component always.
|
134
|
+
#
|
135
|
+
# @return [Integer]
|
136
|
+
def spatial_dimension
|
137
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#spatial_dimension not defined."
|
109
138
|
end
|
110
139
|
|
111
140
|
# === SFS 1.1 Description
|
@@ -122,7 +151,7 @@ module RGeo
|
|
122
151
|
# call the +type_name+ method of the returned module.
|
123
152
|
|
124
153
|
def geometry_type
|
125
|
-
raise Error::UnsupportedOperation, "Method
|
154
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#geometry_type not defined."
|
126
155
|
end
|
127
156
|
|
128
157
|
# === SFS 1.1 Description
|
@@ -137,7 +166,7 @@ module RGeo
|
|
137
166
|
# stored in either the same or some other datastore.
|
138
167
|
|
139
168
|
def srid
|
140
|
-
raise Error::UnsupportedOperation, "Method
|
169
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#srid not defined."
|
141
170
|
end
|
142
171
|
|
143
172
|
# === SFS 1.1 Description
|
@@ -151,7 +180,7 @@ module RGeo
|
|
151
180
|
# Returns an object that supports the Geometry interface.
|
152
181
|
|
153
182
|
def envelope
|
154
|
-
raise Error::UnsupportedOperation, "Method
|
183
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#envelope not defined."
|
155
184
|
end
|
156
185
|
|
157
186
|
# === SFS 1.1 Description
|
@@ -164,7 +193,7 @@ module RGeo
|
|
164
193
|
# Returns an ASCII string.
|
165
194
|
|
166
195
|
def as_text
|
167
|
-
raise Error::UnsupportedOperation, "Method
|
196
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#as_text not defined."
|
168
197
|
end
|
169
198
|
|
170
199
|
# === SFS 1.1 Description
|
@@ -177,7 +206,7 @@ module RGeo
|
|
177
206
|
# Returns a binary string.
|
178
207
|
|
179
208
|
def as_binary
|
180
|
-
raise Error::UnsupportedOperation, "Method
|
209
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#as_binary not defined."
|
181
210
|
end
|
182
211
|
|
183
212
|
# === SFS 1.1 Description
|
@@ -192,12 +221,7 @@ module RGeo
|
|
192
221
|
# specification, which stipulates an integer return value.
|
193
222
|
|
194
223
|
def empty?
|
195
|
-
raise Error::UnsupportedOperation, "Method
|
196
|
-
end
|
197
|
-
|
198
|
-
def is_empty?
|
199
|
-
warn "The is_empty? method is deprecated, please use the empty? counterpart, will be removed in v3" unless ENV["RGEO_SILENCE_DEPRECATION"]
|
200
|
-
empty?
|
224
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#empty? not defined."
|
201
225
|
end
|
202
226
|
|
203
227
|
# === SFS 1.1 Description
|
@@ -214,12 +238,29 @@ module RGeo
|
|
214
238
|
# specification, which stipulates an integer return value.
|
215
239
|
|
216
240
|
def simple?
|
217
|
-
raise Error::UnsupportedOperation, "Method
|
241
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#simple? not defined."
|
218
242
|
end
|
219
243
|
|
220
|
-
|
221
|
-
|
222
|
-
|
244
|
+
# === SFS 1.2 Description
|
245
|
+
#
|
246
|
+
# Returns 1 (TRUE) if this geometric object has z coordinate values.
|
247
|
+
#
|
248
|
+
# === Notes
|
249
|
+
#
|
250
|
+
# @return [Boolean]
|
251
|
+
def is_3d?
|
252
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#is_3d? not defined."
|
253
|
+
end
|
254
|
+
|
255
|
+
# === SFS 1.2 Description
|
256
|
+
#
|
257
|
+
# Returns 1 (TRUE) if this geometric object has m coordinate values.
|
258
|
+
#
|
259
|
+
# === Notes
|
260
|
+
#
|
261
|
+
# @return [Boolean]
|
262
|
+
def measured?
|
263
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#measured? not defined."
|
223
264
|
end
|
224
265
|
|
225
266
|
# === SFS 1.1 Description
|
@@ -234,7 +275,7 @@ module RGeo
|
|
234
275
|
# Returns an object that supports the Geometry interface.
|
235
276
|
|
236
277
|
def boundary
|
237
|
-
raise Error::UnsupportedOperation, "Method
|
278
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#boundary not defined."
|
238
279
|
end
|
239
280
|
|
240
281
|
# === SFS 1.1 Description
|
@@ -252,8 +293,8 @@ module RGeo
|
|
252
293
|
# this geometry, strictly speaking, the result of comparing objects
|
253
294
|
# from different factories is undefined.
|
254
295
|
|
255
|
-
def equals?(
|
256
|
-
raise Error::UnsupportedOperation, "Method
|
296
|
+
def equals?(_another_geometry)
|
297
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#equals? not defined."
|
257
298
|
end
|
258
299
|
|
259
300
|
# === SFS 1.1 Description
|
@@ -271,8 +312,8 @@ module RGeo
|
|
271
312
|
# this geometry, strictly speaking, the result of comparing objects
|
272
313
|
# from different factories is undefined.
|
273
314
|
|
274
|
-
def disjoint?(
|
275
|
-
raise Error::UnsupportedOperation, "Method
|
315
|
+
def disjoint?(_another_geometry)
|
316
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#disjoint? not defined."
|
276
317
|
end
|
277
318
|
|
278
319
|
# === SFS 1.1 Description
|
@@ -290,8 +331,8 @@ module RGeo
|
|
290
331
|
# this geometry, strictly speaking, the result of comparing objects
|
291
332
|
# from different factories is undefined.
|
292
333
|
|
293
|
-
def intersects?(
|
294
|
-
raise Error::UnsupportedOperation, "Method
|
334
|
+
def intersects?(_another_geometry)
|
335
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#intersects? not defined."
|
295
336
|
end
|
296
337
|
|
297
338
|
# === SFS 1.1 Description
|
@@ -309,8 +350,8 @@ module RGeo
|
|
309
350
|
# this geometry, strictly speaking, the result of comparing objects
|
310
351
|
# from different factories is undefined.
|
311
352
|
|
312
|
-
def touches?(
|
313
|
-
raise Error::UnsupportedOperation, "Method
|
353
|
+
def touches?(_another_geometry)
|
354
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#touches? not defined."
|
314
355
|
end
|
315
356
|
|
316
357
|
# === SFS 1.1 Description
|
@@ -328,8 +369,8 @@ module RGeo
|
|
328
369
|
# this geometry, strictly speaking, the result of comparing objects
|
329
370
|
# from different factories is undefined.
|
330
371
|
|
331
|
-
def crosses?(
|
332
|
-
raise Error::UnsupportedOperation, "Method
|
372
|
+
def crosses?(_another_geometry)
|
373
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#crosses? not defined."
|
333
374
|
end
|
334
375
|
|
335
376
|
# === SFS 1.1 Description
|
@@ -347,8 +388,8 @@ module RGeo
|
|
347
388
|
# this geometry, strictly speaking, the result of comparing objects
|
348
389
|
# from different factories is undefined.
|
349
390
|
|
350
|
-
def within?(
|
351
|
-
raise Error::UnsupportedOperation, "Method
|
391
|
+
def within?(_another_geometry)
|
392
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#within? not defined."
|
352
393
|
end
|
353
394
|
|
354
395
|
# === SFS 1.1 Description
|
@@ -366,8 +407,8 @@ module RGeo
|
|
366
407
|
# this geometry, strictly speaking, the result of comparing objects
|
367
408
|
# from different factories is undefined.
|
368
409
|
|
369
|
-
def contains?(
|
370
|
-
raise Error::UnsupportedOperation, "Method
|
410
|
+
def contains?(_another_geometry)
|
411
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#contains? not defined."
|
371
412
|
end
|
372
413
|
|
373
414
|
# === SFS 1.1 Description
|
@@ -385,8 +426,8 @@ module RGeo
|
|
385
426
|
# this geometry, strictly speaking, the result of comparing objects
|
386
427
|
# from different factories is undefined.
|
387
428
|
|
388
|
-
def overlaps?(
|
389
|
-
raise Error::UnsupportedOperation, "Method
|
429
|
+
def overlaps?(_another_geometry)
|
430
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#overlaps? not defined."
|
390
431
|
end
|
391
432
|
|
392
433
|
# === SFS 1.1 Description
|
@@ -411,8 +452,35 @@ module RGeo
|
|
411
452
|
# this geometry, strictly speaking, the result of comparing objects
|
412
453
|
# from different factories is undefined.
|
413
454
|
|
414
|
-
def relate?(
|
415
|
-
raise Error::UnsupportedOperation, "Method
|
455
|
+
def relate?(_another_geometry, _intersection_pattern_matrix_)
|
456
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#relate not defined."
|
457
|
+
end
|
458
|
+
|
459
|
+
# === SFS 1.2 Description
|
460
|
+
#
|
461
|
+
# Returns a derived geometry collection value that matches the
|
462
|
+
# specified m coordinate value.
|
463
|
+
#
|
464
|
+
# === Notes
|
465
|
+
#
|
466
|
+
# @param m_value [Float] value to find matches for
|
467
|
+
# @return [RGeo::Feature::GeometryCollection]
|
468
|
+
def locate_along
|
469
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#locate_along not defined."
|
470
|
+
end
|
471
|
+
|
472
|
+
# === SFS 1.2 Description
|
473
|
+
#
|
474
|
+
# Returns a derived geometry collection value
|
475
|
+
# that matches the specified range of m coordinate values inclusively
|
476
|
+
#
|
477
|
+
# === Notes
|
478
|
+
#
|
479
|
+
# @param m_start [Float] lower bound of value range
|
480
|
+
# @param m_end [Float] upper bound of value range
|
481
|
+
# @return [RGeo::Feature::GeometryCollection]
|
482
|
+
def locate_between
|
483
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#locate_between not defined."
|
416
484
|
end
|
417
485
|
|
418
486
|
# === SFS 1.1 Description
|
@@ -430,8 +498,8 @@ module RGeo
|
|
430
498
|
# this geometry, strictly speaking, the result of measuring the
|
431
499
|
# distance between objects from different factories is undefined.
|
432
500
|
|
433
|
-
def distance(
|
434
|
-
raise Error::UnsupportedOperation, "Method
|
501
|
+
def distance(_another_geometry)
|
502
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#distance not defined."
|
435
503
|
end
|
436
504
|
|
437
505
|
# === SFS 1.1 Description
|
@@ -446,7 +514,7 @@ module RGeo
|
|
446
514
|
# Returns an object that supports the Geometry interface.
|
447
515
|
|
448
516
|
def buffer(_distance_)
|
449
|
-
raise Error::UnsupportedOperation, "Method
|
517
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#buffer not defined."
|
450
518
|
end
|
451
519
|
|
452
520
|
# === SFS 1.1 Description
|
@@ -459,7 +527,7 @@ module RGeo
|
|
459
527
|
# Returns an object that supports the Geometry interface.
|
460
528
|
|
461
529
|
def convex_hull
|
462
|
-
raise Error::UnsupportedOperation, "Method
|
530
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#convex_hull not defined."
|
463
531
|
end
|
464
532
|
|
465
533
|
# === SFS 1.1 Description
|
@@ -476,8 +544,8 @@ module RGeo
|
|
476
544
|
# this geometry, strictly speaking, the result of performing
|
477
545
|
# operations on objects from different factories is undefined.
|
478
546
|
|
479
|
-
def intersection(
|
480
|
-
raise Error::UnsupportedOperation, "Method
|
547
|
+
def intersection(_another_geometry)
|
548
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#intersection not defined."
|
481
549
|
end
|
482
550
|
|
483
551
|
# === SFS 1.1 Description
|
@@ -494,8 +562,8 @@ module RGeo
|
|
494
562
|
# this geometry, strictly speaking, the result of performing
|
495
563
|
# operations on objects from different factories is undefined.
|
496
564
|
|
497
|
-
def union(
|
498
|
-
raise Error::UnsupportedOperation, "Method
|
565
|
+
def union(_another_geometry)
|
566
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#union not defined."
|
499
567
|
end
|
500
568
|
|
501
569
|
# === SFS 1.1 Description
|
@@ -512,8 +580,8 @@ module RGeo
|
|
512
580
|
# this geometry, strictly speaking, the result of performing
|
513
581
|
# operations on objects from different factories is undefined.
|
514
582
|
|
515
|
-
def difference(
|
516
|
-
raise Error::UnsupportedOperation, "Method
|
583
|
+
def difference(_another_geometry)
|
584
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#difference not defined."
|
517
585
|
end
|
518
586
|
|
519
587
|
# === SFS 1.1 Description
|
@@ -530,8 +598,8 @@ module RGeo
|
|
530
598
|
# this geometry, strictly speaking, the result of performing
|
531
599
|
# operations on objects from different factories is undefined.
|
532
600
|
|
533
|
-
def sym_difference(
|
534
|
-
raise Error::UnsupportedOperation, "Method
|
601
|
+
def sym_difference(_another_geometry)
|
602
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#sym_difference not defined."
|
535
603
|
end
|
536
604
|
|
537
605
|
# Returns true if this geometric object is representationally
|
@@ -542,8 +610,8 @@ module RGeo
|
|
542
610
|
# this geometry, strictly speaking, the result of comparing objects
|
543
611
|
# from different factories is undefined.
|
544
612
|
|
545
|
-
def rep_equals?(
|
546
|
-
raise Error::UnsupportedOperation, "Method
|
613
|
+
def rep_equals?(_another_geometry)
|
614
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#rep_equals? not defined."
|
547
615
|
end
|
548
616
|
|
549
617
|
# Unions a collection of Geometry or a single Geometry
|
@@ -560,7 +628,7 @@ module RGeo
|
|
560
628
|
# returns nil.
|
561
629
|
#
|
562
630
|
def unary_union
|
563
|
-
raise Error::UnsupportedOperation, "Method
|
631
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#unary_union not defined."
|
564
632
|
end
|
565
633
|
|
566
634
|
# This method should behave almost the same as the rep_equals?
|
@@ -578,12 +646,12 @@ module RGeo
|
|
578
646
|
# representational equivalence test, this method must fall back on
|
579
647
|
# objective equivalence.
|
580
648
|
|
581
|
-
def eql?(
|
582
|
-
if
|
649
|
+
def eql?(other)
|
650
|
+
if other.is_a?(RGeo::Feature::Instance)
|
583
651
|
begin
|
584
|
-
rep_equals?(
|
652
|
+
rep_equals?(other)
|
585
653
|
rescue Error::UnsupportedOperation
|
586
|
-
equal?(
|
654
|
+
equal?(other)
|
587
655
|
end
|
588
656
|
else
|
589
657
|
false
|
@@ -604,12 +672,12 @@ module RGeo
|
|
604
672
|
# test, the == operator must fall back on representational or
|
605
673
|
# objective equivalence.
|
606
674
|
|
607
|
-
def ==(
|
608
|
-
if
|
675
|
+
def ==(other)
|
676
|
+
if other.is_a?(RGeo::Feature::Instance)
|
609
677
|
begin
|
610
|
-
equals?(
|
678
|
+
equals?(other)
|
611
679
|
rescue Error::UnsupportedOperation
|
612
|
-
eql?(
|
680
|
+
eql?(other)
|
613
681
|
end
|
614
682
|
else
|
615
683
|
false
|
@@ -621,8 +689,8 @@ module RGeo
|
|
621
689
|
# types is not specified; an implementation may choose to provide
|
622
690
|
# additional capabilities as appropriate.
|
623
691
|
|
624
|
-
def -(
|
625
|
-
difference(
|
692
|
+
def -(other)
|
693
|
+
difference(other)
|
626
694
|
end
|
627
695
|
|
628
696
|
# If the given rhs is a geometry object, this operator must behave
|
@@ -630,8 +698,8 @@ module RGeo
|
|
630
698
|
# is not specified; an implementation may choose to provide
|
631
699
|
# additional capabilities as appropriate.
|
632
700
|
|
633
|
-
def +(
|
634
|
-
union(
|
701
|
+
def +(other)
|
702
|
+
union(other)
|
635
703
|
end
|
636
704
|
|
637
705
|
# If the given rhs is a geometry object, this operator must behave
|
@@ -639,8 +707,20 @@ module RGeo
|
|
639
707
|
# types is not specified; an implementation may choose to provide
|
640
708
|
# additional capabilities as appropriate.
|
641
709
|
|
642
|
-
def *(
|
643
|
-
intersection(
|
710
|
+
def *(other)
|
711
|
+
intersection(other)
|
712
|
+
end
|
713
|
+
|
714
|
+
# Convenience method to transform/project a geometry
|
715
|
+
# to a different coordinate system from the geometry itself
|
716
|
+
# instead of the cast method.
|
717
|
+
#
|
718
|
+
# @note: Not an OGC SFS method
|
719
|
+
#
|
720
|
+
# @param [RGeo::Feature::Factory] other_factory
|
721
|
+
# @return [RGeo::Feature::Geometry]
|
722
|
+
def transform(other_factory)
|
723
|
+
Feature.cast(self, factory: other_factory, project: true)
|
644
724
|
end
|
645
725
|
end
|
646
726
|
end
|
@@ -28,7 +28,6 @@ module RGeo
|
|
28
28
|
# include this module itself. Therefore, you should not depend on the
|
29
29
|
# kind_of? method to check type. Instead, use the provided check_type
|
30
30
|
# class method (or === operator) defined in the Type module.
|
31
|
-
|
32
31
|
module GeometryCollection
|
33
32
|
include Geometry
|
34
33
|
extend Type
|
@@ -44,7 +43,7 @@ module RGeo
|
|
44
43
|
# Returns an integer.
|
45
44
|
|
46
45
|
def num_geometries
|
47
|
-
raise Error::UnsupportedOperation, "Method
|
46
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#num_geometries not defined."
|
48
47
|
end
|
49
48
|
|
50
49
|
# === SFS 1.1 Description
|
@@ -58,8 +57,8 @@ module RGeo
|
|
58
57
|
# Also note that this method is different from GeometryCollection#[]
|
59
58
|
# in that it does not support negative indexes.
|
60
59
|
|
61
|
-
def geometry_n(
|
62
|
-
raise Error::UnsupportedOperation, "Method
|
60
|
+
def geometry_n(_idx)
|
61
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#geometry_n not defined."
|
63
62
|
end
|
64
63
|
|
65
64
|
# Alias of the num_geometries method.
|
@@ -78,14 +77,14 @@ module RGeo
|
|
78
77
|
# the same way Ruby's array indexing works. Hence, geometry_n(-1)
|
79
78
|
# returns nil, where [-1] returns the last element of the collection.
|
80
79
|
|
81
|
-
def [](
|
82
|
-
raise Error::UnsupportedOperation, "Method
|
80
|
+
def [](_idx)
|
81
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#[] not defined."
|
83
82
|
end
|
84
83
|
|
85
84
|
# Nodes the linework in a list of Geometries
|
86
85
|
#
|
87
86
|
def node
|
88
|
-
raise Error::UnsupportedOperation, "Method
|
87
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#node not defined."
|
89
88
|
end
|
90
89
|
|
91
90
|
# Iterates over the geometries of this GeometryCollection.
|
@@ -95,8 +94,16 @@ module RGeo
|
|
95
94
|
# Note that all GeometryCollection implementations must also
|
96
95
|
# include the Enumerable mixin.
|
97
96
|
|
98
|
-
def each(&
|
99
|
-
raise Error::UnsupportedOperation, "Method
|
97
|
+
def each(&_block)
|
98
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#each not defined."
|
99
|
+
end
|
100
|
+
|
101
|
+
# Gives a point that is guaranteed to be within the geometry.
|
102
|
+
#
|
103
|
+
# Extends OGC SFS 1.1 and follows PostGIS standards.
|
104
|
+
# @see https://postgis.net/docs/ST_PointOnSurface.html
|
105
|
+
def point_on_surface
|
106
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#each not defined."
|
100
107
|
end
|
101
108
|
end
|
102
109
|
end
|
@@ -20,7 +20,6 @@ module RGeo
|
|
20
20
|
# include this module itself. Therefore, you should not depend on the
|
21
21
|
# kind_of? method to check type. Instead, use the provided check_type
|
22
22
|
# class method (or === operator) defined in the Type module.
|
23
|
-
|
24
23
|
module LineString
|
25
24
|
include Curve
|
26
25
|
extend Type
|
@@ -34,7 +33,7 @@ module RGeo
|
|
34
33
|
# Returns an integer.
|
35
34
|
|
36
35
|
def num_points
|
37
|
-
raise Error::UnsupportedOperation, "Method
|
36
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#num_points not defined."
|
38
37
|
end
|
39
38
|
|
40
39
|
# === SFS 1.1 Description
|
@@ -47,15 +46,15 @@ module RGeo
|
|
47
46
|
# if the given N is out of range. N is zero-based.
|
48
47
|
# Does not support negative indexes.
|
49
48
|
|
50
|
-
def point_n(
|
51
|
-
raise Error::UnsupportedOperation, "Method
|
49
|
+
def point_n(_idx)
|
50
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#point_n not defined."
|
52
51
|
end
|
53
52
|
|
54
53
|
# Returns the constituent points as an array of objects that
|
55
54
|
# support the Point interface.
|
56
55
|
|
57
56
|
def points
|
58
|
-
raise Error::UnsupportedOperation, "Method
|
57
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#points not defined."
|
59
58
|
end
|
60
59
|
end
|
61
60
|
end
|
@@ -19,7 +19,6 @@ module RGeo
|
|
19
19
|
# include this module itself. Therefore, you should not depend on the
|
20
20
|
# kind_of? method to check type. Instead, use the provided check_type
|
21
21
|
# class method (or === operator) defined in the Type module.
|
22
|
-
|
23
22
|
module LinearRing
|
24
23
|
include LineString
|
25
24
|
extend Type
|
@@ -37,7 +37,6 @@ module RGeo
|
|
37
37
|
# include this module itself. Therefore, you should not depend on the
|
38
38
|
# kind_of? method to check type. Instead, use the provided check_type
|
39
39
|
# class method (or === operator) defined in the Type module.
|
40
|
-
|
41
40
|
module MultiCurve
|
42
41
|
include GeometryCollection
|
43
42
|
extend Type
|
@@ -68,11 +67,6 @@ module RGeo
|
|
68
67
|
def closed?
|
69
68
|
raise Error::UnsupportedOperation, "Method MultiCurve#closed? not defined."
|
70
69
|
end
|
71
|
-
|
72
|
-
def is_closed?
|
73
|
-
warn "The is_closed? method is deprecated, please use the closed? counterpart, will be removed in v3" unless ENV["RGEO_SILENCE_DEPRECATION"]
|
74
|
-
closed?
|
75
|
-
end
|
76
70
|
end
|
77
71
|
end
|
78
72
|
end
|
@@ -28,7 +28,6 @@ module RGeo
|
|
28
28
|
# include this module itself. Therefore, you should not depend on the
|
29
29
|
# kind_of? method to check type. Instead, use the provided check_type
|
30
30
|
# class method (or === operator) defined in the Type module.
|
31
|
-
|
32
31
|
module MultiSurface
|
33
32
|
include GeometryCollection
|
34
33
|
extend Type
|
@@ -43,7 +42,7 @@ module RGeo
|
|
43
42
|
# Returns a floating-point scalar value.
|
44
43
|
|
45
44
|
def area
|
46
|
-
raise Error::UnsupportedOperation, "Method
|
45
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#area not defined."
|
47
46
|
end
|
48
47
|
|
49
48
|
# === SFS 1.1 Description
|
@@ -56,7 +55,7 @@ module RGeo
|
|
56
55
|
# Returns an object that supports the Point interface.
|
57
56
|
|
58
57
|
def centroid
|
59
|
-
raise Error::UnsupportedOperation, "Method
|
58
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#centroid not defined."
|
60
59
|
end
|
61
60
|
|
62
61
|
# === SFS 1.1 Description
|
@@ -68,7 +67,7 @@ module RGeo
|
|
68
67
|
# Returns an object that supports the Point interface.
|
69
68
|
|
70
69
|
def point_on_surface
|
71
|
-
raise Error::UnsupportedOperation, "Method
|
70
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#point_on_surface not defined."
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
data/lib/rgeo/feature/point.rb
CHANGED
@@ -33,7 +33,6 @@ module RGeo
|
|
33
33
|
# replace them with empty GeometryCollection objects. Therefore,
|
34
34
|
# currently, every RGeo Point object represents an actual location
|
35
35
|
# with real coordinates.
|
36
|
-
|
37
36
|
module Point
|
38
37
|
include Geometry
|
39
38
|
extend Type
|
@@ -47,7 +46,7 @@ module RGeo
|
|
47
46
|
# Returns a floating-point scalar value.
|
48
47
|
|
49
48
|
def x
|
50
|
-
raise Error::UnsupportedOperation, "Method
|
49
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#x not defined."
|
51
50
|
end
|
52
51
|
|
53
52
|
# === SFS 1.1 Description
|
@@ -59,7 +58,7 @@ module RGeo
|
|
59
58
|
# Returns a floating-point scalar value.
|
60
59
|
|
61
60
|
def y
|
62
|
-
raise Error::UnsupportedOperation, "Method
|
61
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#y not defined."
|
63
62
|
end
|
64
63
|
|
65
64
|
# Returns the z-coordinate for this Point as a floating-point
|
@@ -69,7 +68,7 @@ module RGeo
|
|
69
68
|
# not support Z coordinates.
|
70
69
|
|
71
70
|
def z
|
72
|
-
raise Error::UnsupportedOperation, "Method
|
71
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#z not defined."
|
73
72
|
end
|
74
73
|
|
75
74
|
# Returns the m-coordinate for this Point as a floating-point
|
@@ -79,7 +78,7 @@ module RGeo
|
|
79
78
|
# not support M coordinates.
|
80
79
|
|
81
80
|
def m
|
82
|
-
raise Error::UnsupportedOperation, "Method
|
81
|
+
raise Error::UnsupportedOperation, "Method #{self.class}#m not defined."
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|
data/lib/rgeo/feature/polygon.rb
CHANGED
@@ -45,7 +45,6 @@ module RGeo
|
|
45
45
|
# include this module itself. Therefore, you should not depend on the
|
46
46
|
# kind_of? method to check type. Instead, use the provided check_type
|
47
47
|
# class method (or === operator) defined in the Type module.
|
48
|
-
|
49
48
|
module Polygon
|
50
49
|
include Surface
|
51
50
|
extend Type
|
@@ -84,7 +83,7 @@ module RGeo
|
|
84
83
|
# if the given N is out of range. N is zero-based.
|
85
84
|
# Does not support negative indexes.
|
86
85
|
|
87
|
-
def interior_ring_n(
|
86
|
+
def interior_ring_n(_idx)
|
88
87
|
raise Error::UnsupportedOperation, "Method Polygon#interior_ring_n not defined."
|
89
88
|
end
|
90
89
|
|