rgeo 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/History.rdoc +22 -0
  2. data/README.rdoc +124 -0
  3. data/Version +1 -0
  4. data/ext/geos_c_impl/extconf.rb +72 -0
  5. data/ext/geos_c_impl/factory.c +468 -0
  6. data/ext/geos_c_impl/factory.h +217 -0
  7. data/ext/geos_c_impl/geometry.c +644 -0
  8. data/ext/geos_c_impl/geometry.h +65 -0
  9. data/ext/geos_c_impl/geometry_collection.c +580 -0
  10. data/ext/geos_c_impl/geometry_collection.h +79 -0
  11. data/ext/geos_c_impl/globals.h +58 -0
  12. data/ext/geos_c_impl/line_string.c +468 -0
  13. data/ext/geos_c_impl/line_string.h +74 -0
  14. data/ext/geos_c_impl/main.c +65 -0
  15. data/ext/geos_c_impl/point.c +201 -0
  16. data/ext/geos_c_impl/point.h +77 -0
  17. data/ext/geos_c_impl/polygon.c +259 -0
  18. data/ext/geos_c_impl/polygon.h +76 -0
  19. data/ext/geos_c_impl/preface.h +42 -0
  20. data/lib/rgeo.rb +68 -0
  21. data/lib/rgeo/errors.rb +59 -0
  22. data/lib/rgeo/features.rb +89 -0
  23. data/lib/rgeo/features/curve.rb +155 -0
  24. data/lib/rgeo/features/factory.rb +191 -0
  25. data/lib/rgeo/features/geometry.rb +560 -0
  26. data/lib/rgeo/features/geometry_collection.rb +118 -0
  27. data/lib/rgeo/features/line.rb +65 -0
  28. data/lib/rgeo/features/line_string.rb +101 -0
  29. data/lib/rgeo/features/linear_ring.rb +65 -0
  30. data/lib/rgeo/features/multi_curve.rb +112 -0
  31. data/lib/rgeo/features/multi_line_string.rb +65 -0
  32. data/lib/rgeo/features/multi_point.rb +72 -0
  33. data/lib/rgeo/features/multi_polygon.rb +96 -0
  34. data/lib/rgeo/features/multi_surface.rb +115 -0
  35. data/lib/rgeo/features/point.rb +97 -0
  36. data/lib/rgeo/features/polygon.rb +141 -0
  37. data/lib/rgeo/features/surface.rb +121 -0
  38. data/lib/rgeo/geo_json.rb +58 -0
  39. data/lib/rgeo/geo_json/coder.rb +305 -0
  40. data/lib/rgeo/geo_json/entities.rb +284 -0
  41. data/lib/rgeo/geo_json/interface.rb +95 -0
  42. data/lib/rgeo/geography.rb +75 -0
  43. data/lib/rgeo/geography/common/geometry_collection_methods.rb +206 -0
  44. data/lib/rgeo/geography/common/geometry_methods.rb +92 -0
  45. data/lib/rgeo/geography/common/helper.rb +102 -0
  46. data/lib/rgeo/geography/common/line_string_methods.rb +187 -0
  47. data/lib/rgeo/geography/common/point_methods.rb +149 -0
  48. data/lib/rgeo/geography/common/polygon_methods.rb +122 -0
  49. data/lib/rgeo/geography/factories.rb +136 -0
  50. data/lib/rgeo/geography/factory.rb +246 -0
  51. data/lib/rgeo/geography/projected_window.rb +467 -0
  52. data/lib/rgeo/geography/simple_mercator/feature_classes.rb +320 -0
  53. data/lib/rgeo/geography/simple_mercator/feature_methods.rb +291 -0
  54. data/lib/rgeo/geography/simple_mercator/projector.rb +116 -0
  55. data/lib/rgeo/geography/simple_spherical/calculations.rb +70 -0
  56. data/lib/rgeo/geography/simple_spherical/geometry_collection_impl.rb +66 -0
  57. data/lib/rgeo/geography/simple_spherical/geometry_methods.rb +59 -0
  58. data/lib/rgeo/geography/simple_spherical/line_string_impl.rb +104 -0
  59. data/lib/rgeo/geography/simple_spherical/multi_line_string_impl.rb +67 -0
  60. data/lib/rgeo/geography/simple_spherical/multi_point_impl.rb +67 -0
  61. data/lib/rgeo/geography/simple_spherical/multi_polygon_impl.rb +67 -0
  62. data/lib/rgeo/geography/simple_spherical/point_impl.rb +85 -0
  63. data/lib/rgeo/geography/simple_spherical/polygon_impl.rb +66 -0
  64. data/lib/rgeo/geos.rb +72 -0
  65. data/lib/rgeo/geos/factory.rb +260 -0
  66. data/lib/rgeo/geos/impl_additions.rb +57 -0
  67. data/lib/rgeo/geos/interface.rb +74 -0
  68. data/lib/rgeo/version.rb +52 -0
  69. data/tests/geos/tc_factory.rb +91 -0
  70. data/tests/geos/tc_geometry_collection.rb +226 -0
  71. data/tests/geos/tc_line_string.rb +310 -0
  72. data/tests/geos/tc_misc.rb +72 -0
  73. data/tests/geos/tc_multi_line_string.rb +211 -0
  74. data/tests/geos/tc_multi_point.rb +202 -0
  75. data/tests/geos/tc_multi_polygon.rb +210 -0
  76. data/tests/geos/tc_point.rb +305 -0
  77. data/tests/geos/tc_polygon.rb +240 -0
  78. data/tests/simple_mercator/tc_point.rb +303 -0
  79. data/tests/simple_mercator/tc_window.rb +219 -0
  80. data/tests/tc_geojson.rb +230 -0
  81. data/tests/tc_oneoff.rb +61 -0
  82. metadata +162 -0
@@ -0,0 +1,191 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Feature factory interface
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+ # Copyright 2010 Daniel Azuma
7
+ #
8
+ # All rights reserved.
9
+ #
10
+ # Redistribution and use in source and binary forms, with or without
11
+ # modification, are permitted provided that the following conditions are met:
12
+ #
13
+ # * Redistributions of source code must retain the above copyright notice,
14
+ # this list of conditions and the following disclaimer.
15
+ # * Redistributions in binary form must reproduce the above copyright notice,
16
+ # this list of conditions and the following disclaimer in the documentation
17
+ # and/or other materials provided with the distribution.
18
+ # * Neither the name of the copyright holder, nor the names of any other
19
+ # contributors to this software, may be used to endorse or promote products
20
+ # derived from this software without specific prior written permission.
21
+ #
22
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+ # POSSIBILITY OF SUCH DAMAGE.
33
+ # -----------------------------------------------------------------------------
34
+ ;
35
+
36
+
37
+ module RGeo
38
+
39
+ module Features
40
+
41
+
42
+ # This is a standard interface for factories of features.
43
+ # Generally, each Features implementation will implement these
44
+ # methods as a standard way to create features.
45
+ #
46
+ # If the implementation is unable to create the given feature,
47
+ # it should return nil.
48
+ #
49
+ # Some implementations may extend this interface to provide facilities
50
+ # for creating additional objects according to the features handled
51
+ # by that implementation. Examples might include higher-dimensional
52
+ # coordinates or additional subclasses not explicitly required by the
53
+ # Simple Features Specification.
54
+ #
55
+ # A particular factory implementation may not necessarily include
56
+ # this module. Do not depend on kind_of? or === to check for
57
+ # factory-ness. This module is present primarily for documentation.
58
+
59
+ module Factory
60
+
61
+
62
+ # Parse the given string in well-known-text format and return the
63
+ # resulting feature. Returns nil if the string couldn't be parsed.
64
+
65
+ def parse_wkt(str_)
66
+ nil
67
+ end
68
+
69
+
70
+ # Parse the given string in well-known-binary format and return the
71
+ # resulting feature. Returns nil if the string couldn't be parsed.
72
+
73
+ def parse_wkb(str_)
74
+ nil
75
+ end
76
+
77
+
78
+ # Create a feature of type Point.
79
+ # The x and y parameters should be Float values.
80
+
81
+ def point(x_, y_)
82
+ nil
83
+ end
84
+
85
+
86
+ # Create a feature of type LineString.
87
+ # The given points argument should be an Enumerable of Point objects.
88
+
89
+ def line_string(points_)
90
+ nil
91
+ end
92
+
93
+
94
+ # Create a feature of type Line.
95
+ # The given point arguments should be Point objects.
96
+
97
+ def line(start_, end_)
98
+ nil
99
+ end
100
+
101
+
102
+ # Create a feature of type LinearRing.
103
+ # The given points argument should be an Enumerable of Point objects.
104
+ # If the first and last points are not equal, the ring is
105
+ # automatically closed by appending the first point to the end of the
106
+ # string.
107
+
108
+ def linear_ring(points_)
109
+ nil
110
+ end
111
+
112
+
113
+ # Create a feature of type Polygon.
114
+ # The outer_ring should be a LinearRing.
115
+ # The inner_rings should be a possibly empty Enumerable of
116
+ # LinearRing. You may also pass nil to indicate no inner rings.
117
+
118
+ def polygon(outer_ring_, inner_rings_=nil)
119
+ nil
120
+ end
121
+
122
+
123
+ # Create a feature of type GeometryCollection.
124
+ # The elems should be an Enumerable of Geometry objects.
125
+ # This method does not "flatten" collection hierarchies in the way
126
+ # that multi_point, multi_line_string, and multi_polygon do.
127
+
128
+ def collection(elems_)
129
+ nil
130
+ end
131
+
132
+
133
+ # Create a feature of type MultiPoint.
134
+ # The elems should be an Enumerable of Point objects, or collections
135
+ # whose contents, recursively expanded, eventually include only
136
+ # Point objects. The resultant MultiPoint will thus be "flattened"
137
+ # so that its elements include only those leaf Points.
138
+ # Returns nil if any of the leaf geometries is not a Point, which
139
+ # would break the MultiPoint contract.
140
+
141
+ def multi_point(elems_)
142
+ nil
143
+ end
144
+
145
+
146
+ # Create a feature of type MultiLineString.
147
+ # The elems should be an Enumerable of LineString objects, or
148
+ # collections whose contents, recursively expanded, eventually
149
+ # include only LineString objects (or subclasses thereof).
150
+ # The resultant MultiLineString will thus be "flattened" so that its
151
+ # elements include only those leaf LineStrings.
152
+ # Returns nil if any of the leaf geometries is not a LineString,
153
+ # which would break the MultiLineString contract.
154
+
155
+ def multi_line_string(elems_)
156
+ nil
157
+ end
158
+
159
+
160
+ # Create a feature of type MultiPolygon.
161
+ # The elems should be an Enumerable of Polygon objects, or
162
+ # collections whose contents, recursively expanded, eventually
163
+ # include only Polygon objects.
164
+ # The resultant MultiPolygon will thus be "flattened" so that its
165
+ # elements include only those leaf Polygons.
166
+ # Returns nil if any of the leaf geometries is not a Polygon,
167
+ # which would break the MultiPolygon contract.
168
+ # Also returns nil if any of the other assertions for MultiPolygon
169
+ # are not met-- e.g. if any of the polygons overlap.
170
+
171
+ def multi_polygon(elems_)
172
+ nil
173
+ end
174
+
175
+
176
+ # Convert an existing feature to a feature of the type created by
177
+ # this implementation.
178
+ # If force_new is true, a new object is returned even if the original
179
+ # is already of this implementation.
180
+
181
+ def convert(original_, force_new_=false)
182
+ nil
183
+ end
184
+
185
+
186
+ end
187
+
188
+
189
+ end
190
+
191
+ end
@@ -0,0 +1,560 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Geometry feature interface
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+ # Copyright 2010 Daniel Azuma
7
+ #
8
+ # All rights reserved.
9
+ #
10
+ # Redistribution and use in source and binary forms, with or without
11
+ # modification, are permitted provided that the following conditions are met:
12
+ #
13
+ # * Redistributions of source code must retain the above copyright notice,
14
+ # this list of conditions and the following disclaimer.
15
+ # * Redistributions in binary form must reproduce the above copyright notice,
16
+ # this list of conditions and the following disclaimer in the documentation
17
+ # and/or other materials provided with the distribution.
18
+ # * Neither the name of the copyright holder, nor the names of any other
19
+ # contributors to this software, may be used to endorse or promote products
20
+ # derived from this software without specific prior written permission.
21
+ #
22
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+ # POSSIBILITY OF SUCH DAMAGE.
33
+ # -----------------------------------------------------------------------------
34
+ ;
35
+
36
+
37
+ module RGeo
38
+
39
+ module Features
40
+
41
+
42
+ # == SFS 1.1 Description
43
+ #
44
+ # Geometry is the root class of the hierarchy. Geometry is an abstract
45
+ # (non-instantiable) class.
46
+ #
47
+ # The instantiable subclasses of Geometry defined in this International
48
+ # Standard are restricted to 0, 1 and 2-dimensional geometric objects
49
+ # that exist in 2-dimensional coordinate space (R2).
50
+ #
51
+ # All instantiable Geometry classes described in this part of ISO 19125
52
+ # are defined so that valid instances of a Geometry class are
53
+ # topologically closed, i.e. all defined geometries include their
54
+ # boundary.
55
+ #
56
+ # == Notes
57
+ #
58
+ # Geometry is defined as a module and is provided primarily
59
+ # for the sake of documentation. Implementations need not necessarily
60
+ # include this module itself. Therefore, you should not depend on the
61
+ # kind_of? method to check type. Instead, use the provided check_type
62
+ # class method. A corresponding === operator is also provided to
63
+ # to support case-when constructs.
64
+ #
65
+ # Some implementations may support higher dimensional objects or
66
+ # coordinate systems, despite the limits of the SFS.
67
+ #
68
+ # == Forms of equivalence
69
+ #
70
+ # The Geometry model defines three forms of equivalence.
71
+ #
72
+ # Spatial equivalence::
73
+ # Spatial equivalence is the weakest form of equivalence, indicating
74
+ # that the two objects represent the same region of space, but may
75
+ # be different representations of that region. For example, a
76
+ # POINT(0 0) and a MULTIPOINT(0 0, 0 0) are spatially equivalent, as
77
+ # are LINESTRING(0 0, 10 10) and
78
+ # GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0, 10 10, 0 0)).
79
+ # Objective equivalence::
80
+ # Objective equivalence is a stronger form of equivalence, indicating
81
+ # that the two objects are the same representation, but may be
82
+ # different objects. All objectively equivalent objects are spatially
83
+ # equivalent, but not all spatially equivalent objects are
84
+ # objectively equivalent. For example, none of the examples in the
85
+ # spatial equivalence section above are objectively equivalent.
86
+ # However, two separate objects that both represent POINT(1 2) are
87
+ # objectively equivalent.
88
+ # Objective identity::
89
+ # Objective identity is the strongest form, indicating that the two
90
+ # references refer to the same object. Of course, all pairs of
91
+ # references with the same objective identity are both objectively
92
+ # equivalent and spatially equivalent.
93
+ #
94
+ # Different methods test for different types of equivalence:
95
+ #
96
+ # * <tt>equals?</tt> and <tt>==</tt> test for spatial equivalence.
97
+ # * <tt>eql?</tt> tests for objective equivalence.
98
+ # * <tt>equal?</tt> tests for objective identity.
99
+
100
+ module Geometry
101
+
102
+
103
+ module ClassMethods
104
+
105
+ # Returns true if the given object is this type or a subtype
106
+ # thereof, or if it is a feature object whose geometry_type is
107
+ # this type or a subtype thereof.
108
+ #
109
+ # Note that feature objects need not actually include this module.
110
+
111
+ def check_type(rhs_)
112
+ rhs_ = rhs_.geometry_type if rhs_.respond_to?(:geometry_type)
113
+ rhs_.kind_of?(::Module) && (rhs_ == self || rhs_.include?(self))
114
+ end
115
+ alias_method :===, :check_type
116
+
117
+
118
+ def included(mod_) # :nodoc:
119
+ mod_.extend(ClassMethods)
120
+ end
121
+
122
+ end
123
+
124
+
125
+ extend ClassMethods
126
+
127
+
128
+ # Returns a factory for creating features related to this one.
129
+ # This does not necessarily need to be the same factory that created
130
+ # this object, but it should create objects that are "compatible"
131
+ # with this one. (i.e. they should be in the same spatial reference
132
+ # system by default, and it should be possible to perform relational
133
+ # operations on them.)
134
+
135
+ def factory
136
+ raise Errors::MethodUnimplemented
137
+ end
138
+
139
+
140
+ # Cast this geometry to the given type (which must be one of the
141
+ # type modules in the Features module) and return the resulting
142
+ # object. Returns nil if the cast fails because the types are not
143
+ # compatible or the object does not satisfy the assertions for the
144
+ # new type.
145
+ #
146
+ # Generally, this is only useful for casting general classes to
147
+ # subclasses; e.g. a GeometryCollection to a MultiPoint, or a
148
+ # LineString to a LinearRing.
149
+
150
+ def cast(type_)
151
+ raise Errors::MethodUnimplemented
152
+ end
153
+
154
+
155
+ # Returns true if this geometric object is objectively equivalent
156
+ # to the given object.
157
+
158
+ def eql?(another_geometry_)
159
+ raise Errors::MethodUnimplemented
160
+ end
161
+
162
+
163
+ # === SFS 1.1 Description
164
+ #
165
+ # The inherent dimension of this geometric object, which must be less
166
+ # than or equal to the coordinate dimension. This specification is
167
+ # restricted to geometries in 2-dimensional coordinate space.
168
+ #
169
+ # === Notes
170
+ #
171
+ # Returns an integer. This value is -1 for an empty geometry, 0 for
172
+ # point geometries, 1 for curves, and 2 for surfaces.
173
+
174
+ def dimension
175
+ raise Errors::MethodUnimplemented
176
+ end
177
+
178
+
179
+ # === SFS 1.1 Description
180
+ #
181
+ # Returns the instantiable subtype of Geometry of which this
182
+ # geometric object is an instantiable member.
183
+ #
184
+ # === Notes
185
+ #
186
+ # Returns one of the type modules in RGeo::Features. e.g. a point
187
+ # object would return RGeo::Features::Point. Note that this is
188
+ # different from the SFS specification, which stipulates that the
189
+ # string name of the type is returned. To obtain the name string,
190
+ # call the +name+ method of the returned module.
191
+
192
+ def geometry_type
193
+ raise Errors::MethodUnimplemented
194
+ end
195
+
196
+
197
+ # === SFS 1.1 Description
198
+ #
199
+ # Returns the Spatial Reference System ID for this geometric object.
200
+ #
201
+ # === Notes
202
+ #
203
+ # Returns an integer.
204
+ #
205
+ # This will normally be a foreign key to an index of reference systems
206
+ # stored in either the same or some other datastore.
207
+
208
+ def srid
209
+ raise Errors::MethodUnimplemented
210
+ end
211
+
212
+
213
+ # === SFS 1.1 Description
214
+ #
215
+ # The minimum bounding box for this Geometry, returned as a Geometry.
216
+ # The polygon is defined by the corner points of the bounding box
217
+ # [(MINX, MINY), (MAXX, MINY), (MAXX, MAXY), (MINX, MAXY), (MINX, MINY)].
218
+ #
219
+ # === Notes
220
+ #
221
+ # Returns an object that supports the Geometry interface.
222
+
223
+ def envelope
224
+ raise Errors::MethodUnimplemented
225
+ end
226
+
227
+
228
+ # === SFS 1.1 Description
229
+ #
230
+ # Exports this geometric object to a specific Well-known Text
231
+ # Representation of Geometry.
232
+ #
233
+ # === Notes
234
+ #
235
+ # Returns an ASCII string.
236
+
237
+ def as_text
238
+ raise Errors::MethodUnimplemented
239
+ end
240
+
241
+
242
+ # === SFS 1.1 Description
243
+ #
244
+ # Exports this geometric object to a specific Well-known Binary
245
+ # Representation of Geometry.
246
+ #
247
+ # === Notes
248
+ #
249
+ # Returns a binary string.
250
+
251
+ def as_binary
252
+ raise Errors::MethodUnimplemented
253
+ end
254
+
255
+
256
+ # === SFS 1.1 Description
257
+ #
258
+ # Returns true if this geometric object is the empty Geometry. If true,
259
+ # then this geometric object represents the empty point set for the
260
+ # coordinate space.
261
+ #
262
+ # === Notes
263
+ #
264
+ # Returns a boolean value. Note that this is different from the SFS
265
+ # specification, which stipulates an integer return value.
266
+
267
+ def is_empty?
268
+ raise Errors::MethodUnimplemented
269
+ end
270
+
271
+
272
+ # === SFS 1.1 Description
273
+ #
274
+ # Returns true if this geometric object has no anomalous geometric
275
+ # points, such as self intersection or self tangency. The description
276
+ # of each instantiable geometric class will include the specific
277
+ # conditions that cause an instance of that class to be classified as
278
+ # not simple.
279
+ #
280
+ # === Notes
281
+ #
282
+ # Returns a boolean value. Note that this is different from the SFS
283
+ # specification, which stipulates an integer return value.
284
+
285
+ def is_simple?
286
+ raise Errors::MethodUnimplemented
287
+ end
288
+
289
+
290
+ # === SFS 1.1 Description
291
+ #
292
+ # Returns the closure of the combinatorial boundary of this geometric
293
+ # object. Because the result of this function is a closure, and hence
294
+ # topologically closed, the resulting boundary can be represented using
295
+ # representational Geometry primitives.
296
+ #
297
+ # === Notes
298
+ #
299
+ # Returns an object that supports the Geometry interface.
300
+
301
+ def boundary
302
+ raise Errors::MethodUnimplemented
303
+ end
304
+
305
+
306
+ # === SFS 1.1 Description
307
+ #
308
+ # Returns true if this geometric object is "spatially equal" to
309
+ # another_geometry.
310
+ #
311
+ # === Notes
312
+ #
313
+ # Returns a boolean value. Note that this is different from the SFS
314
+ # specification, which stipulates an integer return value.
315
+
316
+ def equals?(another_geometry_)
317
+ raise Errors::MethodUnimplemented
318
+ end
319
+
320
+
321
+ # === SFS 1.1 Description
322
+ #
323
+ # Returns true if this geometric object is "spatially disjoint" from
324
+ # another_geometry.
325
+ #
326
+ # === Notes
327
+ #
328
+ # Returns a boolean value. Note that this is different from the SFS
329
+ # specification, which stipulates an integer return value.
330
+
331
+ def disjoint?(another_geometry_)
332
+ raise Errors::MethodUnimplemented
333
+ end
334
+
335
+
336
+ # === SFS 1.1 Description
337
+ #
338
+ # Returns true if this geometric object "spatially intersects"
339
+ # another_geometry.
340
+ #
341
+ # === Notes
342
+ #
343
+ # Returns a boolean value. Note that this is different from the SFS
344
+ # specification, which stipulates an integer return value.
345
+
346
+ def intersects?(another_geometry_)
347
+ raise Errors::MethodUnimplemented
348
+ end
349
+
350
+
351
+ # === SFS 1.1 Description
352
+ #
353
+ # Returns true if this geometric object "spatially touches"
354
+ # another_geometry.
355
+ #
356
+ # === Notes
357
+ #
358
+ # Returns a boolean value. Note that this is different from the SFS
359
+ # specification, which stipulates an integer return value.
360
+
361
+ def touches?(another_geometry_)
362
+ raise Errors::MethodUnimplemented
363
+ end
364
+
365
+
366
+ # === SFS 1.1 Description
367
+ #
368
+ # Returns true if this geometric object "spatially crosses"
369
+ # another_geometry.
370
+ #
371
+ # === Notes
372
+ #
373
+ # Returns a boolean value. Note that this is different from the SFS
374
+ # specification, which stipulates an integer return value.
375
+
376
+ def crosses?(another_geometry_)
377
+ raise Errors::MethodUnimplemented
378
+ end
379
+
380
+
381
+ # === SFS 1.1 Description
382
+ #
383
+ # Returns true if this geometric object is "spatially within"
384
+ # another_geometry.
385
+ #
386
+ # === Notes
387
+ #
388
+ # Returns a boolean value. Note that this is different from the SFS
389
+ # specification, which stipulates an integer return value.
390
+
391
+ def within?(another_geometry_)
392
+ raise Errors::MethodUnimplemented
393
+ end
394
+
395
+
396
+ # === SFS 1.1 Description
397
+ #
398
+ # Returns true if this geometric object "spatially contains"
399
+ # another_geometry.
400
+ #
401
+ # === Notes
402
+ #
403
+ # Returns a boolean value. Note that this is different from the SFS
404
+ # specification, which stipulates an integer return value.
405
+
406
+ def contains?(another_geometry_)
407
+ raise Errors::MethodUnimplemented
408
+ end
409
+
410
+
411
+ # === SFS 1.1 Description
412
+ #
413
+ # Returns true if this geometric object "spatially overlaps"
414
+ # another_geometry.
415
+ #
416
+ # === Notes
417
+ #
418
+ # Returns a boolean value. Note that this is different from the SFS
419
+ # specification, which stipulates an integer return value.
420
+
421
+ def overlaps?(another_geometry_)
422
+ raise Errors::MethodUnimplemented
423
+ end
424
+
425
+
426
+ # === SFS 1.1 Description
427
+ #
428
+ # Returns true if this geometric object is spatially related to
429
+ # another_geometry by testing for intersections between the interior,
430
+ # boundary and exterior of the two geometric objects as specified by
431
+ # the values in the intersection_pattern_matrix.
432
+ #
433
+ # === Notes
434
+ #
435
+ # The intersection_pattern_matrix is provided as a nine-character
436
+ # string in row-major order, representing the dimensionalities of
437
+ # the different intersections in the DE-9IM. Supported characters
438
+ # include T, F, *, 0, 1, and 2.
439
+ #
440
+ # Returns a boolean value. Note that this is different from the SFS
441
+ # specification, which stipulates an integer return value.
442
+
443
+ def relate(another_geometry_, intersection_pattern_matrix_)
444
+ raise Errors::MethodUnimplemented
445
+ end
446
+
447
+
448
+ # === SFS 1.1 Description
449
+ #
450
+ # Returns the shortest distance between any two Points in the two
451
+ # geometric objects as calculated in the spatial reference system of
452
+ # this geometric object.
453
+ #
454
+ # === Notes
455
+ #
456
+ # Returns a floating-point scalar value.
457
+
458
+ def distance(another_geometry_)
459
+ raise Errors::MethodUnimplemented
460
+ end
461
+
462
+
463
+ # === SFS 1.1 Description
464
+ #
465
+ # Returns a geometric object that represents all Points whose distance
466
+ # from this geometric object is less than or equal to distance.
467
+ # Calculations are in the spatial reference system of this geometric
468
+ # object.
469
+ #
470
+ # === Notes
471
+ #
472
+ # Returns an object that supports the Geometry interface.
473
+
474
+ def buffer(distance_)
475
+ raise Errors::MethodUnimplemented
476
+ end
477
+
478
+
479
+ # === SFS 1.1 Description
480
+ #
481
+ # Returns a geometric object that represents the convex hull of this
482
+ # geometric object.
483
+ #
484
+ # === Notes
485
+ #
486
+ # Returns an object that supports the Geometry interface.
487
+
488
+ def convex_hull()
489
+ raise Errors::MethodUnimplemented
490
+ end
491
+
492
+
493
+ # === SFS 1.1 Description
494
+ #
495
+ # Returns a geometric object that represents the Point set
496
+ # intersection of this geometric object with another_geometry.
497
+ #
498
+ # === Notes
499
+ #
500
+ # Returns an object that supports the Geometry interface.
501
+
502
+ def intersection(another_geometry_)
503
+ raise Errors::MethodUnimplemented
504
+ end
505
+
506
+
507
+ # === SFS 1.1 Description
508
+ #
509
+ # Returns a geometric object that represents the Point set
510
+ # union of this geometric object with another_geometry.
511
+ #
512
+ # === Notes
513
+ #
514
+ # Returns an object that supports the Geometry interface.
515
+
516
+ def union(another_geometry_)
517
+ raise Errors::MethodUnimplemented
518
+ end
519
+
520
+
521
+ # === SFS 1.1 Description
522
+ #
523
+ # Returns a geometric object that represents the Point set
524
+ # difference of this geometric object with another_geometry.
525
+ #
526
+ # === Notes
527
+ #
528
+ # Returns an object that supports the Geometry interface.
529
+
530
+ def difference(another_geometry_)
531
+ raise Errors::MethodUnimplemented
532
+ end
533
+
534
+
535
+ # === SFS 1.1 Description
536
+ #
537
+ # Returns a geometric object that represents the Point set symmetric
538
+ # difference of this geometric object with another_geometry.
539
+ #
540
+ # === Notes
541
+ #
542
+ # Returns an object that supports the Geometry interface.
543
+
544
+ def sym_difference(another_geometry_)
545
+ raise Errors::MethodUnimplemented
546
+ end
547
+
548
+
549
+ alias_method :==, :equals?
550
+ alias_method :-, :difference
551
+ alias_method :+, :union
552
+ alias_method :*, :intersection
553
+
554
+
555
+ end
556
+
557
+
558
+ end
559
+
560
+ end