rgeo 0.1.12 → 0.1.13

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 (86) hide show
  1. data/History.rdoc +9 -7
  2. data/README.rdoc +7 -5
  3. data/Version +1 -1
  4. data/ext/geos_c_impl/factory.c +12 -19
  5. data/ext/geos_c_impl/factory.h +15 -21
  6. data/ext/geos_c_impl/geometry.c +19 -36
  7. data/ext/geos_c_impl/geometry.h +2 -12
  8. data/ext/geos_c_impl/geometry_collection.c +38 -157
  9. data/ext/geos_c_impl/geometry_collection.h +2 -12
  10. data/ext/geos_c_impl/line_string.c +83 -80
  11. data/ext/geos_c_impl/line_string.h +2 -12
  12. data/ext/geos_c_impl/main.c +5 -0
  13. data/ext/geos_c_impl/point.c +2 -12
  14. data/ext/geos_c_impl/point.h +2 -12
  15. data/ext/geos_c_impl/polygon.c +5 -14
  16. data/ext/geos_c_impl/polygon.h +2 -12
  17. data/ext/geos_c_impl/preface.h +8 -0
  18. data/lib/rgeo.rb +34 -16
  19. data/lib/rgeo/{geography/simple_spherical/geometry_collection_impl.rb → cartesian.rb} +19 -26
  20. data/lib/rgeo/cartesian/calculations.rb +129 -0
  21. data/lib/rgeo/cartesian/interface.rb +85 -0
  22. data/lib/rgeo/cartesian/simple_factory.rb +159 -0
  23. data/lib/rgeo/cartesian/simple_feature_classes.rb +187 -0
  24. data/lib/rgeo/cartesian/simple_feature_methods.rb +97 -0
  25. data/lib/rgeo/features.rb +1 -0
  26. data/lib/rgeo/features/curve.rb +3 -2
  27. data/lib/rgeo/features/factory.rb +62 -37
  28. data/lib/rgeo/features/geometry.rb +10 -32
  29. data/lib/rgeo/features/geometry_collection.rb +3 -2
  30. data/lib/rgeo/features/line.rb +3 -2
  31. data/lib/rgeo/features/line_string.rb +3 -2
  32. data/lib/rgeo/features/linear_ring.rb +3 -2
  33. data/lib/rgeo/features/multi_curve.rb +3 -2
  34. data/lib/rgeo/features/multi_line_string.rb +3 -2
  35. data/lib/rgeo/features/multi_point.rb +3 -2
  36. data/lib/rgeo/features/multi_polygon.rb +3 -2
  37. data/lib/rgeo/features/multi_surface.rb +3 -2
  38. data/lib/rgeo/features/point.rb +3 -2
  39. data/lib/rgeo/features/polygon.rb +3 -2
  40. data/lib/rgeo/features/surface.rb +3 -2
  41. data/lib/rgeo/features/types.rb +198 -0
  42. data/lib/rgeo/geography.rb +4 -14
  43. data/lib/rgeo/geography/factory.rb +7 -64
  44. data/lib/rgeo/geography/{simple_spherical/geometry_methods.rb → helper.rb} +4 -13
  45. data/lib/rgeo/geography/simple_mercator/feature_classes.rb +35 -89
  46. data/lib/rgeo/geography/simple_mercator/feature_methods.rb +22 -31
  47. data/lib/rgeo/geography/simple_mercator/projector.rb +4 -8
  48. data/lib/rgeo/geography/simple_spherical/calculations.rb +11 -9
  49. data/lib/rgeo/geography/simple_spherical/feature_classes.rb +189 -0
  50. data/lib/rgeo/geography/simple_spherical/{line_string_impl.rb → feature_methods.rb} +16 -64
  51. data/lib/rgeo/geos/factory.rb +26 -40
  52. data/lib/rgeo/geos/impl_additions.rb +3 -5
  53. data/lib/rgeo/{geography/simple_spherical/polygon_impl.rb → impl_helpers.rb} +16 -26
  54. data/lib/rgeo/impl_helpers/basic_geometry_collection_methods.rb +186 -0
  55. data/lib/rgeo/impl_helpers/basic_geometry_methods.rb +90 -0
  56. data/lib/rgeo/impl_helpers/basic_line_string_methods.rb +188 -0
  57. data/lib/rgeo/impl_helpers/basic_point_methods.rb +149 -0
  58. data/lib/rgeo/{geography/common/helper.rb → impl_helpers/basic_polygon_methods.rb} +62 -53
  59. data/lib/rgeo/{geography/common/polygon_methods.rb → impl_helpers/serialization.rb} +50 -42
  60. data/tests/common/geometry_collection_tests.rb +9 -7
  61. data/tests/common/multi_line_string_tests.rb +16 -13
  62. data/tests/common/multi_point_tests.rb +16 -13
  63. data/tests/common/multi_polygon_tests.rb +8 -6
  64. data/tests/common/point_tests.rb +1 -2
  65. data/tests/common/polygon_tests.rb +9 -9
  66. data/tests/geos/tc_multi_line_string.rb +2 -2
  67. data/tests/simple_cartesian/tc_calculations.rb +138 -0
  68. data/tests/simple_cartesian/tc_geometry_collection.rb +68 -0
  69. data/tests/simple_cartesian/tc_line_string.rb +70 -0
  70. data/{lib/rgeo/geography/simple_spherical/multi_line_string_impl.rb → tests/simple_cartesian/tc_multi_line_string.rb} +19 -19
  71. data/{lib/rgeo/geography/simple_spherical/multi_polygon_impl.rb → tests/simple_cartesian/tc_multi_point.rb} +19 -19
  72. data/{lib/rgeo/geography/common/geometry_methods.rb → tests/simple_cartesian/tc_multi_polygon.rb} +19 -41
  73. data/{lib/rgeo/geography/simple_spherical/point_impl.rb → tests/simple_cartesian/tc_point.rb} +33 -35
  74. data/tests/simple_cartesian/tc_polygon.rb +67 -0
  75. data/tests/simple_spherical/tc_geometry_collection.rb +68 -0
  76. data/tests/simple_spherical/tc_line_string.rb +10 -171
  77. data/tests/simple_spherical/tc_multi_line_string.rb +67 -0
  78. data/{lib/rgeo/geography/simple_spherical/multi_point_impl.rb → tests/simple_spherical/tc_multi_point.rb} +19 -19
  79. data/tests/simple_spherical/tc_multi_polygon.rb +70 -0
  80. data/tests/simple_spherical/tc_point.rb +17 -115
  81. data/tests/simple_spherical/tc_polygon.rb +67 -0
  82. metadata +46 -18
  83. data/ext/geos_c_impl/globals.h +0 -58
  84. data/lib/rgeo/geography/common/geometry_collection_methods.rb +0 -217
  85. data/lib/rgeo/geography/common/line_string_methods.rb +0 -201
  86. data/lib/rgeo/geography/common/point_methods.rb +0 -153
@@ -40,3 +40,11 @@
40
40
  #define RGEO_GEOS_SUPPORTED
41
41
  #endif
42
42
  #endif
43
+
44
+ #ifdef __cplusplus
45
+ #define RGEO_BEGIN_C extern "C" {
46
+ #define RGEO_END_C }
47
+ #else
48
+ #define RGEO_BEGIN_C
49
+ #define RGEO_END_C
50
+ #endif
data/lib/rgeo.rb CHANGED
@@ -34,27 +34,20 @@
34
34
  ;
35
35
 
36
36
 
37
- # The source files that should be required by default.
38
- paths_ = [
39
- 'version',
40
- 'errors',
41
- 'features',
42
- 'geos',
43
- 'geography',
44
- 'geo_json',
45
- ]
46
- paths_.each{ |path_| require "rgeo/#{path_}" }
47
-
48
-
49
37
  # RGeo is a spatial data library for Ruby.
50
38
  #
51
39
  # The RGeo::Features module contains interface specifications for spatial
52
40
  # objects implemented by RGeo. These interfaces closely follow the OGC
53
- # Simple Features Specifiation.
41
+ # Simple Features Specifiation (SFS).
42
+ #
43
+ # The RGeo::Cartesian module provides basic implementations of spatial
44
+ # objects in a Cartesian (flat) coordinate system. There is a pure ruby
45
+ # implementation that provides basic services, and there are bridges to
46
+ # external implementations that support all the SFS operations.
54
47
  #
55
- # The RGeo::Geos module contains a spatial implementation that wraps
56
- # the GEOS library. This is a full implementation that operates on
57
- # cartesian coordinates.
48
+ # One of these external bridges is provided by the RGeo::Geos module,
49
+ # which wraps the GEOS library to provide a full, high-performance
50
+ # Cartesian geometry implementation.
58
51
  #
59
52
  # The RGeo::Geography module contains spatial implementations that
60
53
  # operate in latitude-longitude coordinates. Several different
@@ -63,6 +56,31 @@ paths_.each{ |path_| require "rgeo/#{path_}" }
63
56
  #
64
57
  # The RGeo::GeoJSON module contains tools for GeoJSON serialization of
65
58
  # spatial objects.
59
+ #
60
+ # Future modules in development include:
61
+ #
62
+ # * RGeo::Shapefile, which provides tools for reading and writing
63
+ # spatial objects in the ESRI shapefile format.
64
+ # * RGeo::Rails, which provides close integration with Ruby On Rails
65
+ # for developing location-based web applications.
66
+ # * RGeo::JTS, which provides a Cartesian SFS implementation backed by
67
+ # the JTS library (which can run natively in JRuby.)
68
+ # * RGeo::Geography extensions to provide highly accurate ellipsoidal
69
+ # geometric calculations, and support arbitrary map projections.
66
70
 
67
71
  module RGeo
68
72
  end
73
+
74
+
75
+ # The source files that should be required by default.
76
+ paths_ = [
77
+ 'version',
78
+ 'errors',
79
+ 'features',
80
+ 'impl_helpers',
81
+ 'geos',
82
+ 'cartesian',
83
+ 'geography',
84
+ 'geo_json',
85
+ ]
86
+ paths_.each{ |path_| require "rgeo/#{path_}" }
@@ -1,6 +1,6 @@
1
1
  # -----------------------------------------------------------------------------
2
2
  #
3
- # Spherical GeometryCollection implementation
3
+ # Cartesian features for RGeo
4
4
  #
5
5
  # -----------------------------------------------------------------------------
6
6
  # Copyright 2010 Daniel Azuma
@@ -36,31 +36,24 @@
36
36
 
37
37
  module RGeo
38
38
 
39
- module Geography
40
-
41
- module SimpleSpherical
42
-
43
-
44
- class GeometryCollectionImpl
45
-
46
-
47
- include Features::GeometryCollection
48
- include Common::GeometryMethods
49
- include GeometryMethods
50
- include Common::GeometryCollectionMethods
51
-
52
-
53
- def initialize(factory_, elements_)
54
- _set_factory(factory_)
55
- _setup(elements_)
56
- end
57
-
58
-
59
- end
60
-
61
-
62
- end
63
-
39
+
40
+ # The cartesian features module
41
+
42
+ module Cartesian
64
43
  end
65
44
 
45
+
66
46
  end
47
+
48
+
49
+ # Dependency source files.
50
+ paths_ = [
51
+ 'features',
52
+ 'geos',
53
+ 'cartesian/calculations',
54
+ 'cartesian/simple_feature_methods',
55
+ 'cartesian/simple_feature_classes',
56
+ 'cartesian/simple_factory',
57
+ 'cartesian/interface',
58
+ ]
59
+ paths_.each{ |path_| require "rgeo/#{path_}" }
@@ -0,0 +1,129 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Core calculations in the plane
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 Cartesian
40
+
41
+
42
+ # Represents a line segment in the plane.
43
+
44
+ class Segment # :nodoc:
45
+
46
+ def initialize(start_, end_)
47
+ @s = start_
48
+ @e = end_
49
+ @sx = @s.x
50
+ @sy = @s.y
51
+ @ex = @e.x
52
+ @ey = @e.y
53
+ @dx = @ex - @sx
54
+ @dy = @ey - @sy
55
+ @lensq = @dx * @dx + @dy * @dy
56
+ end
57
+
58
+
59
+ attr_reader :s
60
+ attr_reader :e
61
+ attr_reader :dx
62
+ attr_reader :dy
63
+
64
+
65
+ def to_s
66
+ "#{@s} - #{@e}"
67
+ end
68
+
69
+
70
+ def eql?(rhs_)
71
+ rhs_.kind_of?(Segment) && @s == rhs_.s && @e == rhs_.e
72
+ end
73
+ alias_method :==, :eql?
74
+
75
+
76
+ def degenerate?
77
+ @lensq == 0
78
+ end
79
+
80
+
81
+ def side(p_)
82
+ px_ = p_.x
83
+ py_ = p_.y
84
+ (@sx - px_) * (@ey - py_) - (@sy - py_) * (@ex - px_)
85
+ end
86
+
87
+
88
+ def tproj(p_)
89
+ if @lensq == 0
90
+ nil
91
+ else
92
+ px_ = @sx - p_.x
93
+ py_ = @sy - p_.y
94
+ - (@dx * px_ + @dy * py_) / @lensq
95
+ end
96
+ end
97
+
98
+
99
+ def contains_point?(p_)
100
+ if side(p_) == 0
101
+ t_ = tproj(p_)
102
+ t_ && t_ >= 0.0 && t_ <= 1.0
103
+ else
104
+ false
105
+ end
106
+ end
107
+
108
+
109
+ def intersects_segment?(seg_)
110
+ s2_ = seg_.s
111
+ sx2_ = s2_.x
112
+ sy2_ = s2_.y
113
+ dx2_ = seg_.dx
114
+ dy2_ = seg_.dy
115
+ denom_ = @dx*dy2_ - @dy*dx2_
116
+ return side(s2_) == 0 if denom_ == 0
117
+ t_ = (dy2_ * (sx2_ - @sx) + dx2_ * (@sy - sy2_)) / denom_
118
+ return false if t_ < 0.0 || t_ > 1.0
119
+ t2_ = (@dy * (sx2_ - @sx) + @dx * (@sy - sy2_)) / denom_
120
+ t2_ >= 0.0 && t2_ <= 1.0
121
+ end
122
+
123
+
124
+ end
125
+
126
+
127
+ end
128
+
129
+ end
@@ -0,0 +1,85 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Cartesian toplevel 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 Cartesian
40
+
41
+ class << self
42
+
43
+
44
+ # Creates and returns a cartesian factory of the preferred
45
+ # implementation.
46
+ #
47
+ # The actual implementation returned depends on which ruby
48
+ # interpreter is running and what libraries are available.
49
+ # RGeo will try to provide a fully-functional and performant
50
+ # implementation if possible. If not, the simple cartesian
51
+ # implementation will be returned.
52
+ #
53
+ # The given options are passed to the factory's constructor.
54
+ # What options are available depends on the particular
55
+ # implementation. Unsupported options are ignored.
56
+
57
+ def preferred_factory(opts_={})
58
+ if Geos.supported?
59
+ Geos.factory(opts_)
60
+ else
61
+ simple_factory(opts_)
62
+ end
63
+ end
64
+ alias_method :factory, :preferred_factory
65
+
66
+
67
+ # Returns a factory for the simple cartesian implementation.
68
+ # This implementation is always available.
69
+ #
70
+ # Options include:
71
+ #
72
+ # <tt>:srid</tt>::
73
+ # Set the SRID returned by geometries created by this factory.
74
+ # Default is 0.
75
+
76
+ def simple_factory(opts_={})
77
+ SimpleFactory.new(opts_)
78
+ end
79
+
80
+
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,159 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Geographic data factory implementation
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 Cartesian
40
+
41
+
42
+ # This class implements the factory for the simple cartesian
43
+ # implementation.
44
+
45
+ class SimpleFactory
46
+
47
+ include Features::Factory::Instance
48
+
49
+
50
+ # Create a new simple cartesian factory.
51
+ #
52
+ # Options supported are:
53
+ #
54
+ # <tt>:srid</tt>::
55
+ # The SRID reported by features created by this factory.
56
+ # Default is 0.
57
+
58
+ def initialize(opts_={})
59
+ @srid = opts_[:srid].to_i
60
+ end
61
+
62
+
63
+ # Equivalence test.
64
+
65
+ def eql?(rhs_)
66
+ rhs_.is_a?(self.class) && @srid == rhs_.srid
67
+ end
68
+ alias_method :==, :eql?
69
+
70
+
71
+ # Returns the SRID.
72
+
73
+ def srid
74
+ @srid
75
+ end
76
+
77
+
78
+ # See ::RGeo::Features::Factory#parse_wkt
79
+
80
+ def parse_wkt(str_)
81
+ ImplHelpers::Serialization.parse_wkt(str_, self)
82
+ end
83
+
84
+
85
+ # See ::RGeo::Features::Factory#parse_wkb
86
+
87
+ def parse_wkb(str_)
88
+ ImplHelpers::Serialization.parse_wkb(str_, self)
89
+ end
90
+
91
+
92
+ # See ::RGeo::Features::Factory#point
93
+
94
+ def point(x_, y_)
95
+ SimplePointImpl.new(self, x_, y_) rescue nil
96
+ end
97
+
98
+
99
+ # See ::RGeo::Features::Factory#line_string
100
+
101
+ def line_string(points_)
102
+ SimpleLineStringImpl.new(self, points_) rescue nil
103
+ end
104
+
105
+
106
+ # See ::RGeo::Features::Factory#line
107
+
108
+ def line(start_, end_)
109
+ SimpleLineImpl.new(self, start_, end_) rescue nil
110
+ end
111
+
112
+
113
+ # See ::RGeo::Features::Factory#linear_ring
114
+
115
+ def linear_ring(points_)
116
+ SimpleLinearRingImpl.new(self, points_) rescue nil
117
+ end
118
+
119
+
120
+ # See ::RGeo::Features::Factory#polygon
121
+
122
+ def polygon(outer_ring_, inner_rings_=nil)
123
+ SimplePolygonImpl.new(self, outer_ring_, inner_rings_) rescue nil
124
+ end
125
+
126
+
127
+ # See ::RGeo::Features::Factory#collection
128
+
129
+ def collection(elems_)
130
+ SimpleGeometryCollectionImpl.new(self, elems_) rescue nil
131
+ end
132
+
133
+
134
+ # See ::RGeo::Features::Factory#multi_point
135
+
136
+ def multi_point(elems_)
137
+ SimpleMultiPointImpl.new(self, elems_) rescue nil
138
+ end
139
+
140
+
141
+ # See ::RGeo::Features::Factory#multi_line_string
142
+
143
+ def multi_line_string(elems_)
144
+ SimpleMultiLineStringImpl.new(self, elems_) rescue nil
145
+ end
146
+
147
+
148
+ # See ::RGeo::Features::Factory#multi_polygon
149
+
150
+ def multi_polygon(elems_)
151
+ SimpleMultiPolygonImpl.new(self, elems_) rescue nil
152
+ end
153
+
154
+
155
+ end
156
+
157
+ end
158
+
159
+ end