rgeo 2.3.1 → 3.0.0.pre.rc.2

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -0
  3. data/README.md +11 -10
  4. data/ext/geos_c_impl/analysis.c +8 -6
  5. data/ext/geos_c_impl/analysis.h +1 -3
  6. data/ext/geos_c_impl/errors.c +10 -8
  7. data/ext/geos_c_impl/errors.h +7 -3
  8. data/ext/geos_c_impl/extconf.rb +3 -0
  9. data/ext/geos_c_impl/factory.c +273 -202
  10. data/ext/geos_c_impl/factory.h +51 -63
  11. data/ext/geos_c_impl/geometry.c +124 -22
  12. data/ext/geos_c_impl/geometry.h +8 -3
  13. data/ext/geos_c_impl/geometry_collection.c +81 -185
  14. data/ext/geos_c_impl/geometry_collection.h +1 -14
  15. data/ext/geos_c_impl/globals.c +91 -0
  16. data/ext/geos_c_impl/globals.h +45 -0
  17. data/ext/geos_c_impl/line_string.c +28 -29
  18. data/ext/geos_c_impl/line_string.h +1 -3
  19. data/ext/geos_c_impl/main.c +10 -9
  20. data/ext/geos_c_impl/point.c +9 -8
  21. data/ext/geos_c_impl/point.h +1 -3
  22. data/ext/geos_c_impl/polygon.c +43 -72
  23. data/ext/geos_c_impl/polygon.h +1 -3
  24. data/ext/geos_c_impl/preface.h +12 -0
  25. data/ext/geos_c_impl/ruby_more.c +65 -0
  26. data/ext/geos_c_impl/ruby_more.h +16 -0
  27. data/lib/rgeo/cartesian/calculations.rb +54 -17
  28. data/lib/rgeo/cartesian/factory.rb +6 -14
  29. data/lib/rgeo/cartesian/feature_classes.rb +68 -46
  30. data/lib/rgeo/cartesian/feature_methods.rb +67 -20
  31. data/lib/rgeo/cartesian/interface.rb +0 -36
  32. data/lib/rgeo/cartesian/planar_graph.rb +379 -0
  33. data/lib/rgeo/cartesian/sweepline_intersector.rb +149 -0
  34. data/lib/rgeo/cartesian/valid_op.rb +71 -0
  35. data/lib/rgeo/cartesian.rb +3 -0
  36. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +6 -6
  37. data/lib/rgeo/coord_sys.rb +0 -11
  38. data/lib/rgeo/error.rb +15 -0
  39. data/lib/rgeo/feature/factory_generator.rb +0 -3
  40. data/lib/rgeo/feature/geometry.rb +107 -28
  41. data/lib/rgeo/feature/geometry_collection.rb +13 -5
  42. data/lib/rgeo/feature/line_string.rb +3 -3
  43. data/lib/rgeo/feature/multi_surface.rb +3 -3
  44. data/lib/rgeo/feature/point.rb +4 -4
  45. data/lib/rgeo/feature/surface.rb +3 -3
  46. data/lib/rgeo/geographic/factory.rb +6 -7
  47. data/lib/rgeo/geographic/interface.rb +6 -49
  48. data/lib/rgeo/geographic/proj4_projector.rb +0 -2
  49. data/lib/rgeo/geographic/projected_feature_classes.rb +21 -9
  50. data/lib/rgeo/geographic/projected_feature_methods.rb +67 -28
  51. data/lib/rgeo/geographic/simple_mercator_projector.rb +0 -2
  52. data/lib/rgeo/geographic/spherical_feature_classes.rb +29 -9
  53. data/lib/rgeo/geographic/spherical_feature_methods.rb +79 -2
  54. data/lib/rgeo/geos/capi_factory.rb +21 -38
  55. data/lib/rgeo/geos/capi_feature_classes.rb +54 -11
  56. data/lib/rgeo/geos/ffi_factory.rb +6 -35
  57. data/lib/rgeo/geos/ffi_feature_classes.rb +34 -10
  58. data/lib/rgeo/geos/ffi_feature_methods.rb +39 -5
  59. data/lib/rgeo/geos/interface.rb +0 -24
  60. data/lib/rgeo/geos/zm_factory.rb +0 -19
  61. data/lib/rgeo/geos/zm_feature_methods.rb +16 -0
  62. data/lib/rgeo/geos.rb +6 -3
  63. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +4 -4
  64. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -1
  65. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +15 -19
  66. data/lib/rgeo/impl_helper/basic_point_methods.rb +1 -1
  67. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +1 -1
  68. data/lib/rgeo/impl_helper/valid_op.rb +354 -0
  69. data/lib/rgeo/impl_helper/validity_check.rb +139 -0
  70. data/lib/rgeo/impl_helper.rb +1 -0
  71. data/lib/rgeo/version.rb +1 -1
  72. metadata +45 -9
  73. data/lib/rgeo/coord_sys/srs_database/entry.rb +0 -107
  74. data/lib/rgeo/coord_sys/srs_database/sr_org.rb +0 -64
  75. data/lib/rgeo/coord_sys/srs_database/url_reader.rb +0 -65
data/lib/rgeo/error.rb CHANGED
@@ -29,5 +29,20 @@ module RGeo
29
29
  # Parsing failed
30
30
  class ParseError < RGeoError
31
31
  end
32
+
33
+ # Standard error messages from
34
+ # https://github.com/locationtech/jts/blob/0afbfb1956ec24912a8b4dc4edff0f1200442857/modules/core/src/main/java/org/locationtech/jts/operation/valid/TopologyValidationError.java#L98-L110
35
+ TOPOLOGY_VALIDATION_ERR = "Topology Validation Error"
36
+ REPEATED_POINT = "Repeated Point"
37
+ HOLE_OUTSIDE_SHELL = "Hole lies outside shell"
38
+ NESTED_HOLES = "Holes are nested"
39
+ DISCONNECTED_INTERIOR = "Interior is disconnected"
40
+ SELF_INTERSECTION = "Self-intersection"
41
+ RING_SELF_INTERSECTION = "Ring Self-intersection"
42
+ NESTED_SHELLS = "Nested shells"
43
+ DUPLICATE_RINGS = "Duplicate Rings"
44
+ TOO_FEW_POINTS = "Too few distinct points in geometry component"
45
+ INVALID_COORDINATE = "Invalid Coordinate"
46
+ UNCLOSED_RING = "Ring is not closed"
32
47
  end
33
48
  end
@@ -66,9 +66,6 @@ module RGeo
66
66
  # CoordSys::CS::CoordinateSystem, or as a string in WKT format.
67
67
  # This is usually an optional parameter; the default is usually
68
68
  # nil.
69
- # [<tt>:srs_database</tt>]
70
- # If provided, look up the Proj4 and OGC coordinate systems from
71
- # the given database and SRID.
72
69
  # [<tt>:has_z_coordinate</tt>]
73
70
  # Support Z coordinates. Default is usually false.
74
71
  # [<tt>:has_m_coordinate</tt>]
@@ -90,7 +90,7 @@ module RGeo
90
90
  # operations on them.)
91
91
 
92
92
  def factory
93
- raise Error::UnsupportedOperation, "Method Geometry#factory not defined."
93
+ raise Error::UnsupportedOperation, "Method #{self.class}#factory not defined."
94
94
  end
95
95
 
96
96
  # === SFS 1.1 Description
@@ -105,7 +105,37 @@ module RGeo
105
105
  # point geometries, 1 for curves, and 2 for surfaces.
106
106
 
107
107
  def dimension
108
- raise Error::UnsupportedOperation, "Method Geometry#dimension not defined."
108
+ raise Error::UnsupportedOperation, "Method #{self.class}#dimension not defined."
109
+ end
110
+
111
+ # === SFS 1.2 Description
112
+ #
113
+ # The coordinate dimension is the dimension of direct positions (coordinate tuples) used in
114
+ # the definition of this geometric object
115
+ #
116
+ # === Notes
117
+ #
118
+ # Difference between this and dimension is that this is the dimension of the coordinate
119
+ # not the dimension of the geometry.
120
+ #
121
+ # @return [Integer]
122
+ def coordinate_dimension
123
+ raise Error::UnsupportedOperation, "Method #{self.class}#coordinate_dimension not defined."
124
+ end
125
+
126
+ # === SFS 1.2 Description
127
+ #
128
+ # The spatial dimension is the dimension of the spatial portion of the direct positions
129
+ # (coordinate tuples) used in the definition of this geometric object. If the direct positions
130
+ # do not carry a measure coordinate, this will be equal to the coordinate dimension.
131
+ #
132
+ # === Notes
133
+ #
134
+ # Similar to coordinate_dimension except it will ignore the M component always.
135
+ #
136
+ # @return [Integer]
137
+ def spatial_dimension
138
+ raise Error::UnsupportedOperation, "Method #{self.class}#spatial_dimension not defined."
109
139
  end
110
140
 
111
141
  # === SFS 1.1 Description
@@ -122,7 +152,7 @@ module RGeo
122
152
  # call the +type_name+ method of the returned module.
123
153
 
124
154
  def geometry_type
125
- raise Error::UnsupportedOperation, "Method Geometry#geometry_type not defined."
155
+ raise Error::UnsupportedOperation, "Method #{self.class}#geometry_type not defined."
126
156
  end
127
157
 
128
158
  # === SFS 1.1 Description
@@ -137,7 +167,7 @@ module RGeo
137
167
  # stored in either the same or some other datastore.
138
168
 
139
169
  def srid
140
- raise Error::UnsupportedOperation, "Method Geometry#srid not defined."
170
+ raise Error::UnsupportedOperation, "Method #{self.class}#srid not defined."
141
171
  end
142
172
 
143
173
  # === SFS 1.1 Description
@@ -151,7 +181,7 @@ module RGeo
151
181
  # Returns an object that supports the Geometry interface.
152
182
 
153
183
  def envelope
154
- raise Error::UnsupportedOperation, "Method Geometry#envelope not defined."
184
+ raise Error::UnsupportedOperation, "Method #{self.class}#envelope not defined."
155
185
  end
156
186
 
157
187
  # === SFS 1.1 Description
@@ -164,7 +194,7 @@ module RGeo
164
194
  # Returns an ASCII string.
165
195
 
166
196
  def as_text
167
- raise Error::UnsupportedOperation, "Method Geometry#as_text not defined."
197
+ raise Error::UnsupportedOperation, "Method #{self.class}#as_text not defined."
168
198
  end
169
199
 
170
200
  # === SFS 1.1 Description
@@ -177,7 +207,7 @@ module RGeo
177
207
  # Returns a binary string.
178
208
 
179
209
  def as_binary
180
- raise Error::UnsupportedOperation, "Method Geometry#as_binary not defined."
210
+ raise Error::UnsupportedOperation, "Method #{self.class}#as_binary not defined."
181
211
  end
182
212
 
183
213
  # === SFS 1.1 Description
@@ -192,7 +222,7 @@ module RGeo
192
222
  # specification, which stipulates an integer return value.
193
223
 
194
224
  def empty?
195
- raise Error::UnsupportedOperation, "Method Geometry#empty? not defined."
225
+ raise Error::UnsupportedOperation, "Method #{self.class}#empty? not defined."
196
226
  end
197
227
 
198
228
  def is_empty?
@@ -214,7 +244,7 @@ module RGeo
214
244
  # specification, which stipulates an integer return value.
215
245
 
216
246
  def simple?
217
- raise Error::UnsupportedOperation, "Method Geometry#simple? not defined."
247
+ raise Error::UnsupportedOperation, "Method #{self.class}#simple? not defined."
218
248
  end
219
249
 
220
250
  def is_simple?
@@ -222,6 +252,28 @@ module RGeo
222
252
  simple?
223
253
  end
224
254
 
255
+ # === SFS 1.2 Description
256
+ #
257
+ # Returns 1 (TRUE) if this geometric object has z coordinate values.
258
+ #
259
+ # === Notes
260
+ #
261
+ # @return [Boolean]
262
+ def is_3d?
263
+ raise Error::UnsupportedOperation, "Method #{self.class}#is_3d? not defined."
264
+ end
265
+
266
+ # === SFS 1.2 Description
267
+ #
268
+ # Returns 1 (TRUE) if this geometric object has m coordinate values.
269
+ #
270
+ # === Notes
271
+ #
272
+ # @return [Boolean]
273
+ def measured?
274
+ raise Error::UnsupportedOperation, "Method #{self.class}#measured? not defined."
275
+ end
276
+
225
277
  # === SFS 1.1 Description
226
278
  #
227
279
  # Returns the closure of the combinatorial boundary of this geometric
@@ -234,7 +286,7 @@ module RGeo
234
286
  # Returns an object that supports the Geometry interface.
235
287
 
236
288
  def boundary
237
- raise Error::UnsupportedOperation, "Method Geometry#boundary not defined."
289
+ raise Error::UnsupportedOperation, "Method #{self.class}#boundary not defined."
238
290
  end
239
291
 
240
292
  # === SFS 1.1 Description
@@ -253,7 +305,7 @@ module RGeo
253
305
  # from different factories is undefined.
254
306
 
255
307
  def equals?(another_geometry)
256
- raise Error::UnsupportedOperation, "Method Geometry#equals? not defined."
308
+ raise Error::UnsupportedOperation, "Method #{self.class}#equals? not defined."
257
309
  end
258
310
 
259
311
  # === SFS 1.1 Description
@@ -272,7 +324,7 @@ module RGeo
272
324
  # from different factories is undefined.
273
325
 
274
326
  def disjoint?(another_geometry)
275
- raise Error::UnsupportedOperation, "Method Geometry#disjoint? not defined."
327
+ raise Error::UnsupportedOperation, "Method #{self.class}#disjoint? not defined."
276
328
  end
277
329
 
278
330
  # === SFS 1.1 Description
@@ -291,7 +343,7 @@ module RGeo
291
343
  # from different factories is undefined.
292
344
 
293
345
  def intersects?(another_geometry)
294
- raise Error::UnsupportedOperation, "Method Geometry#intersects? not defined."
346
+ raise Error::UnsupportedOperation, "Method #{self.class}#intersects? not defined."
295
347
  end
296
348
 
297
349
  # === SFS 1.1 Description
@@ -310,7 +362,7 @@ module RGeo
310
362
  # from different factories is undefined.
311
363
 
312
364
  def touches?(another_geometry)
313
- raise Error::UnsupportedOperation, "Method Geometry#touches? not defined."
365
+ raise Error::UnsupportedOperation, "Method #{self.class}#touches? not defined."
314
366
  end
315
367
 
316
368
  # === SFS 1.1 Description
@@ -329,7 +381,7 @@ module RGeo
329
381
  # from different factories is undefined.
330
382
 
331
383
  def crosses?(another_geometry)
332
- raise Error::UnsupportedOperation, "Method Geometry#crosses? not defined."
384
+ raise Error::UnsupportedOperation, "Method #{self.class}#crosses? not defined."
333
385
  end
334
386
 
335
387
  # === SFS 1.1 Description
@@ -348,7 +400,7 @@ module RGeo
348
400
  # from different factories is undefined.
349
401
 
350
402
  def within?(another_geometry)
351
- raise Error::UnsupportedOperation, "Method Geometry#within? not defined."
403
+ raise Error::UnsupportedOperation, "Method #{self.class}#within? not defined."
352
404
  end
353
405
 
354
406
  # === SFS 1.1 Description
@@ -367,7 +419,7 @@ module RGeo
367
419
  # from different factories is undefined.
368
420
 
369
421
  def contains?(another_geometry)
370
- raise Error::UnsupportedOperation, "Method Geometry#contains? not defined."
422
+ raise Error::UnsupportedOperation, "Method #{self.class}#contains? not defined."
371
423
  end
372
424
 
373
425
  # === SFS 1.1 Description
@@ -386,7 +438,7 @@ module RGeo
386
438
  # from different factories is undefined.
387
439
 
388
440
  def overlaps?(another_geometry)
389
- raise Error::UnsupportedOperation, "Method Geometry#overlaps? not defined."
441
+ raise Error::UnsupportedOperation, "Method #{self.class}#overlaps? not defined."
390
442
  end
391
443
 
392
444
  # === SFS 1.1 Description
@@ -412,7 +464,34 @@ module RGeo
412
464
  # from different factories is undefined.
413
465
 
414
466
  def relate?(another_geometry, _intersection_pattern_matrix_)
415
- raise Error::UnsupportedOperation, "Method Geometry#relate not defined."
467
+ raise Error::UnsupportedOperation, "Method #{self.class}#relate not defined."
468
+ end
469
+
470
+ # === SFS 1.2 Description
471
+ #
472
+ # Returns a derived geometry collection value that matches the
473
+ # specified m coordinate value.
474
+ #
475
+ # === Notes
476
+ #
477
+ # @param m_value [Float] value to find matches for
478
+ # @return [RGeo::Feature::GeometryCollection]
479
+ def locate_along
480
+ raise Error::UnsupportedOperation, "Method #{self.class}#locate_along not defined."
481
+ end
482
+
483
+ # === SFS 1.2 Description
484
+ #
485
+ # Returns a derived geometry collection value
486
+ # that matches the specified range of m coordinate values inclusively
487
+ #
488
+ # === Notes
489
+ #
490
+ # @param m_start [Float] lower bound of value range
491
+ # @param m_end [Float] upper bound of value range
492
+ # @return [RGeo::Feature::GeometryCollection]
493
+ def locate_between
494
+ raise Error::UnsupportedOperation, "Method #{self.class}#locate_between not defined."
416
495
  end
417
496
 
418
497
  # === SFS 1.1 Description
@@ -431,7 +510,7 @@ module RGeo
431
510
  # distance between objects from different factories is undefined.
432
511
 
433
512
  def distance(another_geometry)
434
- raise Error::UnsupportedOperation, "Method Geometry#distance not defined."
513
+ raise Error::UnsupportedOperation, "Method #{self.class}#distance not defined."
435
514
  end
436
515
 
437
516
  # === SFS 1.1 Description
@@ -446,7 +525,7 @@ module RGeo
446
525
  # Returns an object that supports the Geometry interface.
447
526
 
448
527
  def buffer(_distance_)
449
- raise Error::UnsupportedOperation, "Method Geometry#buffer not defined."
528
+ raise Error::UnsupportedOperation, "Method #{self.class}#buffer not defined."
450
529
  end
451
530
 
452
531
  # === SFS 1.1 Description
@@ -459,7 +538,7 @@ module RGeo
459
538
  # Returns an object that supports the Geometry interface.
460
539
 
461
540
  def convex_hull
462
- raise Error::UnsupportedOperation, "Method Geometry#convex_hull not defined."
541
+ raise Error::UnsupportedOperation, "Method #{self.class}#convex_hull not defined."
463
542
  end
464
543
 
465
544
  # === SFS 1.1 Description
@@ -477,7 +556,7 @@ module RGeo
477
556
  # operations on objects from different factories is undefined.
478
557
 
479
558
  def intersection(another_geometry)
480
- raise Error::UnsupportedOperation, "Method Geometry#intersection not defined."
559
+ raise Error::UnsupportedOperation, "Method #{self.class}#intersection not defined."
481
560
  end
482
561
 
483
562
  # === SFS 1.1 Description
@@ -495,7 +574,7 @@ module RGeo
495
574
  # operations on objects from different factories is undefined.
496
575
 
497
576
  def union(another_geometry)
498
- raise Error::UnsupportedOperation, "Method Geometry#union not defined."
577
+ raise Error::UnsupportedOperation, "Method #{self.class}#union not defined."
499
578
  end
500
579
 
501
580
  # === SFS 1.1 Description
@@ -513,7 +592,7 @@ module RGeo
513
592
  # operations on objects from different factories is undefined.
514
593
 
515
594
  def difference(another_geometry)
516
- raise Error::UnsupportedOperation, "Method Geometry#difference not defined."
595
+ raise Error::UnsupportedOperation, "Method #{self.class}#difference not defined."
517
596
  end
518
597
 
519
598
  # === SFS 1.1 Description
@@ -531,7 +610,7 @@ module RGeo
531
610
  # operations on objects from different factories is undefined.
532
611
 
533
612
  def sym_difference(another_geometry)
534
- raise Error::UnsupportedOperation, "Method Geometry#sym_difference not defined."
613
+ raise Error::UnsupportedOperation, "Method #{self.class}#sym_difference not defined."
535
614
  end
536
615
 
537
616
  # Returns true if this geometric object is representationally
@@ -543,7 +622,7 @@ module RGeo
543
622
  # from different factories is undefined.
544
623
 
545
624
  def rep_equals?(another_geometry)
546
- raise Error::UnsupportedOperation, "Method Geometry#rep_equals? not defined."
625
+ raise Error::UnsupportedOperation, "Method #{self.class}#rep_equals? not defined."
547
626
  end
548
627
 
549
628
  # Unions a collection of Geometry or a single Geometry
@@ -560,7 +639,7 @@ module RGeo
560
639
  # returns nil.
561
640
  #
562
641
  def unary_union
563
- raise Error::UnsupportedOperation, "Method Geometry#unary_union not defined."
642
+ raise Error::UnsupportedOperation, "Method #{self.class}#unary_union not defined."
564
643
  end
565
644
 
566
645
  # This method should behave almost the same as the rep_equals?
@@ -44,7 +44,7 @@ module RGeo
44
44
  # Returns an integer.
45
45
 
46
46
  def num_geometries
47
- raise Error::UnsupportedOperation, "Method GeometryCollection#num_geometries not defined."
47
+ raise Error::UnsupportedOperation, "Method #{self.class}#num_geometries not defined."
48
48
  end
49
49
 
50
50
  # === SFS 1.1 Description
@@ -59,7 +59,7 @@ module RGeo
59
59
  # in that it does not support negative indexes.
60
60
 
61
61
  def geometry_n(n)
62
- raise Error::UnsupportedOperation, "Method GeometryCollection#geometry_n not defined."
62
+ raise Error::UnsupportedOperation, "Method #{self.class}#geometry_n not defined."
63
63
  end
64
64
 
65
65
  # Alias of the num_geometries method.
@@ -79,13 +79,13 @@ module RGeo
79
79
  # returns nil, where [-1] returns the last element of the collection.
80
80
 
81
81
  def [](n)
82
- raise Error::UnsupportedOperation, "Method GeometryCollection#[] not defined."
82
+ raise Error::UnsupportedOperation, "Method #{self.class}#[] not defined."
83
83
  end
84
84
 
85
85
  # Nodes the linework in a list of Geometries
86
86
  #
87
87
  def node
88
- raise Error::UnsupportedOperation, "Method GeometryCollection#node not defined."
88
+ raise Error::UnsupportedOperation, "Method #{self.class}#node not defined."
89
89
  end
90
90
 
91
91
  # Iterates over the geometries of this GeometryCollection.
@@ -96,7 +96,15 @@ module RGeo
96
96
  # include the Enumerable mixin.
97
97
 
98
98
  def each(&block)
99
- raise Error::UnsupportedOperation, "Method GeometryCollection#each not defined."
99
+ raise Error::UnsupportedOperation, "Method #{self.class}#each not defined."
100
+ end
101
+
102
+ # Gives a point that is guaranteed to be within the geometry.
103
+ #
104
+ # Extends OGC SFS 1.1 and follows PostGIS standards.
105
+ # @see https://postgis.net/docs/ST_PointOnSurface.html
106
+ def point_on_surface
107
+ raise Error::UnsupportedOperation, "Method #{self.class}#each not defined."
100
108
  end
101
109
  end
102
110
  end
@@ -34,7 +34,7 @@ module RGeo
34
34
  # Returns an integer.
35
35
 
36
36
  def num_points
37
- raise Error::UnsupportedOperation, "Method LineString#num_points not defined."
37
+ raise Error::UnsupportedOperation, "Method #{self.class}#num_points not defined."
38
38
  end
39
39
 
40
40
  # === SFS 1.1 Description
@@ -48,14 +48,14 @@ module RGeo
48
48
  # Does not support negative indexes.
49
49
 
50
50
  def point_n(n)
51
- raise Error::UnsupportedOperation, "Method LineString#point_n not defined."
51
+ raise Error::UnsupportedOperation, "Method #{self.class}#point_n not defined."
52
52
  end
53
53
 
54
54
  # Returns the constituent points as an array of objects that
55
55
  # support the Point interface.
56
56
 
57
57
  def points
58
- raise Error::UnsupportedOperation, "Method LineString#points not defined."
58
+ raise Error::UnsupportedOperation, "Method #{self.class}#points not defined."
59
59
  end
60
60
  end
61
61
  end
@@ -43,7 +43,7 @@ module RGeo
43
43
  # Returns a floating-point scalar value.
44
44
 
45
45
  def area
46
- raise Error::UnsupportedOperation, "Method MultiSurface#area not defined."
46
+ raise Error::UnsupportedOperation, "Method #{self.class}#area not defined."
47
47
  end
48
48
 
49
49
  # === SFS 1.1 Description
@@ -56,7 +56,7 @@ module RGeo
56
56
  # Returns an object that supports the Point interface.
57
57
 
58
58
  def centroid
59
- raise Error::UnsupportedOperation, "Method MultiSurface#centroid not defined."
59
+ raise Error::UnsupportedOperation, "Method #{self.class}#centroid not defined."
60
60
  end
61
61
 
62
62
  # === SFS 1.1 Description
@@ -68,7 +68,7 @@ module RGeo
68
68
  # Returns an object that supports the Point interface.
69
69
 
70
70
  def point_on_surface
71
- raise Error::UnsupportedOperation, "Method MultiSurface#point_on_surface not defined."
71
+ raise Error::UnsupportedOperation, "Method #{self.class}#point_on_surface not defined."
72
72
  end
73
73
  end
74
74
  end
@@ -47,7 +47,7 @@ module RGeo
47
47
  # Returns a floating-point scalar value.
48
48
 
49
49
  def x
50
- raise Error::UnsupportedOperation, "Method Point#x not defined."
50
+ raise Error::UnsupportedOperation, "Method #{self.class}#x not defined."
51
51
  end
52
52
 
53
53
  # === SFS 1.1 Description
@@ -59,7 +59,7 @@ module RGeo
59
59
  # Returns a floating-point scalar value.
60
60
 
61
61
  def y
62
- raise Error::UnsupportedOperation, "Method Point#y not defined."
62
+ raise Error::UnsupportedOperation, "Method #{self.class}#y not defined."
63
63
  end
64
64
 
65
65
  # Returns the z-coordinate for this Point as a floating-point
@@ -69,7 +69,7 @@ module RGeo
69
69
  # not support Z coordinates.
70
70
 
71
71
  def z
72
- raise Error::UnsupportedOperation, "Method Point#z not defined."
72
+ raise Error::UnsupportedOperation, "Method #{self.class}#z not defined."
73
73
  end
74
74
 
75
75
  # Returns the m-coordinate for this Point as a floating-point
@@ -79,7 +79,7 @@ module RGeo
79
79
  # not support M coordinates.
80
80
 
81
81
  def m
82
- raise Error::UnsupportedOperation, "Method Point#m not defined."
82
+ raise Error::UnsupportedOperation, "Method #{self.class}#m not defined."
83
83
  end
84
84
  end
85
85
  end
@@ -49,7 +49,7 @@ module RGeo
49
49
  # Returns a floating-point scalar value.
50
50
 
51
51
  def area
52
- raise Error::UnsupportedOperation, "Method Surface#area not defined."
52
+ raise Error::UnsupportedOperation, "Method #{self.class.name}#area not defined."
53
53
  end
54
54
 
55
55
  # === SFS 1.1 Description
@@ -62,7 +62,7 @@ module RGeo
62
62
  # Returns an object that supports the Point interface.
63
63
 
64
64
  def centroid
65
- raise Error::UnsupportedOperation, "Method Surface#centroid not defined."
65
+ raise Error::UnsupportedOperation, "Method #{self.class.name}#centroid not defined."
66
66
  end
67
67
 
68
68
  # === SFS 1.1 Description
@@ -74,7 +74,7 @@ module RGeo
74
74
  # Returns an object that supports the Point interface.
75
75
 
76
76
  def point_on_surface
77
- raise Error::UnsupportedOperation, "Method Surface#point_on_surface not defined."
77
+ raise Error::UnsupportedOperation, "Method #{self.class.name}#point_on_surface not defined."
78
78
  end
79
79
  end
80
80
  end
@@ -31,6 +31,11 @@ module RGeo
31
31
  @multi_polygon_class = Geographic.const_get("#{impl_prefix}MultiPolygonImpl")
32
32
  @support_z = opts[:has_z_coordinate] ? true : false
33
33
  @support_m = opts[:has_m_coordinate] ? true : false
34
+ @coordinate_dimension = 2
35
+ @coordinate_dimension += 1 if @support_z
36
+ @coordinate_dimension += 1 if @support_m
37
+ @spatial_dimension = @support_z ? 3 : 2
38
+
34
39
  @srid = (opts[:srid] || 4326).to_i
35
40
  @proj4 = opts[:proj4]
36
41
  if @proj4 && CoordSys.check!(:proj4)
@@ -42,7 +47,6 @@ module RGeo
42
47
  if @coord_sys.is_a?(String)
43
48
  @coord_sys = CoordSys::CS.create_from_wkt(@coord_sys)
44
49
  end
45
- @lenient_assertions = opts[:uses_lenient_assertions] ? true : false
46
50
  @buffer_resolution = opts[:buffer_resolution].to_i
47
51
  @buffer_resolution = 1 if @buffer_resolution < 1
48
52
 
@@ -76,6 +80,7 @@ module RGeo
76
80
  end
77
81
  @projector = nil
78
82
  end
83
+ attr_reader :coordinate_dimension, :spatial_dimension
79
84
 
80
85
  # Equivalence test.
81
86
 
@@ -106,7 +111,6 @@ module RGeo
106
111
  "wkbg" => @wkb_generator.properties,
107
112
  "wktp" => @wkt_parser.properties,
108
113
  "wkbp" => @wkb_parser.properties,
109
- "lena" => @lenient_assertions,
110
114
  "bufr" => @buffer_resolution
111
115
  }
112
116
  hash_["proj4"] = @proj4.marshal_dump if @proj4
@@ -138,7 +142,6 @@ module RGeo
138
142
  wkb_generator: symbolize_hash(data_["wkbg"]),
139
143
  wkt_parser: symbolize_hash(data_["wktp"]),
140
144
  wkb_parser: symbolize_hash(data_["wkbp"]),
141
- uses_lenient_assertions: data_["lena"],
142
145
  buffer_resolution: data_["bufr"],
143
146
  proj4: proj4,
144
147
  coord_sys: coord_sys
@@ -164,7 +167,6 @@ module RGeo
164
167
  coder["wkb_generator"] = @wkb_generator.properties
165
168
  coder["wkt_parser"] = @wkt_parser.properties
166
169
  coder["wkb_parser"] = @wkb_parser.properties
167
- coder["lenient_assertions"] = @lenient_assertions
168
170
  coder["buffer_resolution"] = @buffer_resolution
169
171
  if @proj4
170
172
  str = @proj4.original_str || @proj4.canonical_str
@@ -201,7 +203,6 @@ module RGeo
201
203
  wkb_generator: symbolize_hash(coder["wkb_generator"]),
202
204
  wkt_parser: symbolize_hash(coder["wkt_parser"]),
203
205
  wkb_parser: symbolize_hash(coder["wkb_parser"]),
204
- uses_lenient_assertions: coder["lenient_assertions"],
205
206
  buffer_resolution: coder["buffer_resolution"],
206
207
  proj4: proj4,
207
208
  coord_sys: coord_sys
@@ -293,8 +294,6 @@ module RGeo
293
294
  @support_z
294
295
  when :has_m_coordinate
295
296
  @support_m
296
- when :uses_lenient_assertions
297
- @lenient_assertions
298
297
  when :buffer_resolution
299
298
  @buffer_resolution
300
299
  when :is_geographic