schleyfox-rgeo 0.2.5

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 (150) hide show
  1. data/History.rdoc +199 -0
  2. data/README.rdoc +172 -0
  3. data/Spatial_Programming_With_RGeo.rdoc +440 -0
  4. data/Version +1 -0
  5. data/ext/geos_c_impl/extconf.rb +84 -0
  6. data/ext/geos_c_impl/factory.c +468 -0
  7. data/ext/geos_c_impl/factory.h +224 -0
  8. data/ext/geos_c_impl/geometry.c +705 -0
  9. data/ext/geos_c_impl/geometry.h +55 -0
  10. data/ext/geos_c_impl/geometry_collection.c +482 -0
  11. data/ext/geos_c_impl/geometry_collection.h +69 -0
  12. data/ext/geos_c_impl/line_string.c +509 -0
  13. data/ext/geos_c_impl/line_string.h +64 -0
  14. data/ext/geos_c_impl/main.c +70 -0
  15. data/ext/geos_c_impl/point.c +193 -0
  16. data/ext/geos_c_impl/point.h +62 -0
  17. data/ext/geos_c_impl/polygon.c +265 -0
  18. data/ext/geos_c_impl/polygon.h +66 -0
  19. data/ext/geos_c_impl/preface.h +50 -0
  20. data/ext/proj4_c_impl/extconf.rb +88 -0
  21. data/ext/proj4_c_impl/main.c +271 -0
  22. data/lib/rgeo.rb +124 -0
  23. data/lib/rgeo/cartesian.rb +60 -0
  24. data/lib/rgeo/cartesian/analysis.rb +118 -0
  25. data/lib/rgeo/cartesian/bounding_box.rb +337 -0
  26. data/lib/rgeo/cartesian/calculations.rb +161 -0
  27. data/lib/rgeo/cartesian/factory.rb +209 -0
  28. data/lib/rgeo/cartesian/feature_classes.rb +173 -0
  29. data/lib/rgeo/cartesian/feature_methods.rb +106 -0
  30. data/lib/rgeo/cartesian/interface.rb +150 -0
  31. data/lib/rgeo/coord_sys.rb +79 -0
  32. data/lib/rgeo/coord_sys/cs/entities.rb +1524 -0
  33. data/lib/rgeo/coord_sys/cs/factories.rb +208 -0
  34. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +308 -0
  35. data/lib/rgeo/coord_sys/proj4.rb +312 -0
  36. data/lib/rgeo/coord_sys/srs_database/active_record_table.rb +194 -0
  37. data/lib/rgeo/coord_sys/srs_database/interface.rb +165 -0
  38. data/lib/rgeo/coord_sys/srs_database/proj4_data.rb +188 -0
  39. data/lib/rgeo/coord_sys/srs_database/sr_org.rb +108 -0
  40. data/lib/rgeo/coord_sys/srs_database/url_reader.rb +108 -0
  41. data/lib/rgeo/error.rb +63 -0
  42. data/lib/rgeo/feature.rb +88 -0
  43. data/lib/rgeo/feature/curve.rb +156 -0
  44. data/lib/rgeo/feature/factory.rb +332 -0
  45. data/lib/rgeo/feature/factory_generator.rb +138 -0
  46. data/lib/rgeo/feature/geometry.rb +614 -0
  47. data/lib/rgeo/feature/geometry_collection.rb +129 -0
  48. data/lib/rgeo/feature/line.rb +66 -0
  49. data/lib/rgeo/feature/line_string.rb +102 -0
  50. data/lib/rgeo/feature/linear_ring.rb +66 -0
  51. data/lib/rgeo/feature/multi_curve.rb +113 -0
  52. data/lib/rgeo/feature/multi_line_string.rb +66 -0
  53. data/lib/rgeo/feature/multi_point.rb +73 -0
  54. data/lib/rgeo/feature/multi_polygon.rb +97 -0
  55. data/lib/rgeo/feature/multi_surface.rb +116 -0
  56. data/lib/rgeo/feature/point.rb +120 -0
  57. data/lib/rgeo/feature/polygon.rb +141 -0
  58. data/lib/rgeo/feature/surface.rb +122 -0
  59. data/lib/rgeo/feature/types.rb +305 -0
  60. data/lib/rgeo/geographic.rb +75 -0
  61. data/lib/rgeo/geographic/factory.rb +287 -0
  62. data/lib/rgeo/geographic/interface.rb +410 -0
  63. data/lib/rgeo/geographic/proj4_projector.rb +98 -0
  64. data/lib/rgeo/geographic/projected_feature_classes.rb +213 -0
  65. data/lib/rgeo/geographic/projected_feature_methods.rb +228 -0
  66. data/lib/rgeo/geographic/projected_window.rb +467 -0
  67. data/lib/rgeo/geographic/simple_mercator_projector.rb +157 -0
  68. data/lib/rgeo/geographic/spherical_feature_classes.rb +212 -0
  69. data/lib/rgeo/geographic/spherical_feature_methods.rb +97 -0
  70. data/lib/rgeo/geographic/spherical_math.rb +206 -0
  71. data/lib/rgeo/geos.rb +72 -0
  72. data/lib/rgeo/geos/factory.rb +301 -0
  73. data/lib/rgeo/geos/impl_additions.rb +76 -0
  74. data/lib/rgeo/geos/interface.rb +139 -0
  75. data/lib/rgeo/geos/zm_factory.rb +275 -0
  76. data/lib/rgeo/geos/zm_impl.rb +432 -0
  77. data/lib/rgeo/impl_helper.rb +53 -0
  78. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +235 -0
  79. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +85 -0
  80. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +197 -0
  81. data/lib/rgeo/impl_helper/basic_point_methods.rb +138 -0
  82. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +121 -0
  83. data/lib/rgeo/impl_helper/math.rb +50 -0
  84. data/lib/rgeo/version.rb +52 -0
  85. data/lib/rgeo/wkrep.rb +72 -0
  86. data/lib/rgeo/wkrep/wkb_generator.rb +267 -0
  87. data/lib/rgeo/wkrep/wkb_parser.rb +315 -0
  88. data/lib/rgeo/wkrep/wkt_generator.rb +275 -0
  89. data/lib/rgeo/wkrep/wkt_parser.rb +496 -0
  90. data/test/common/geometry_collection_tests.rb +238 -0
  91. data/test/common/line_string_tests.rb +324 -0
  92. data/test/common/multi_line_string_tests.rb +209 -0
  93. data/test/common/multi_point_tests.rb +201 -0
  94. data/test/common/multi_polygon_tests.rb +208 -0
  95. data/test/common/point_tests.rb +331 -0
  96. data/test/common/polygon_tests.rb +232 -0
  97. data/test/coord_sys/tc_active_record_table.rb +102 -0
  98. data/test/coord_sys/tc_ogc_cs.rb +356 -0
  99. data/test/coord_sys/tc_proj4.rb +138 -0
  100. data/test/coord_sys/tc_proj4_srs_data.rb +76 -0
  101. data/test/coord_sys/tc_sr_org.rb +70 -0
  102. data/test/coord_sys/tc_url_reader.rb +82 -0
  103. data/test/geos/tc_factory.rb +91 -0
  104. data/test/geos/tc_geometry_collection.rb +62 -0
  105. data/test/geos/tc_line_string.rb +62 -0
  106. data/test/geos/tc_misc.rb +72 -0
  107. data/test/geos/tc_multi_line_string.rb +62 -0
  108. data/test/geos/tc_multi_point.rb +62 -0
  109. data/test/geos/tc_multi_polygon.rb +63 -0
  110. data/test/geos/tc_point.rb +86 -0
  111. data/test/geos/tc_polygon.rb +86 -0
  112. data/test/geos/tc_zmfactory.rb +85 -0
  113. data/test/projected_geographic/tc_geometry_collection.rb +62 -0
  114. data/test/projected_geographic/tc_line_string.rb +62 -0
  115. data/test/projected_geographic/tc_multi_line_string.rb +62 -0
  116. data/test/projected_geographic/tc_multi_point.rb +62 -0
  117. data/test/projected_geographic/tc_multi_polygon.rb +63 -0
  118. data/test/projected_geographic/tc_point.rb +93 -0
  119. data/test/projected_geographic/tc_polygon.rb +62 -0
  120. data/test/simple_cartesian/tc_calculations.rb +145 -0
  121. data/test/simple_cartesian/tc_geometry_collection.rb +69 -0
  122. data/test/simple_cartesian/tc_line_string.rb +70 -0
  123. data/test/simple_cartesian/tc_multi_line_string.rb +67 -0
  124. data/test/simple_cartesian/tc_multi_point.rb +67 -0
  125. data/test/simple_cartesian/tc_multi_polygon.rb +70 -0
  126. data/test/simple_cartesian/tc_point.rb +91 -0
  127. data/test/simple_cartesian/tc_polygon.rb +67 -0
  128. data/test/simple_mercator/tc_geometry_collection.rb +62 -0
  129. data/test/simple_mercator/tc_line_string.rb +62 -0
  130. data/test/simple_mercator/tc_multi_line_string.rb +62 -0
  131. data/test/simple_mercator/tc_multi_point.rb +62 -0
  132. data/test/simple_mercator/tc_multi_polygon.rb +63 -0
  133. data/test/simple_mercator/tc_point.rb +93 -0
  134. data/test/simple_mercator/tc_polygon.rb +62 -0
  135. data/test/simple_mercator/tc_window.rb +219 -0
  136. data/test/spherical_geographic/tc_calculations.rb +203 -0
  137. data/test/spherical_geographic/tc_geometry_collection.rb +70 -0
  138. data/test/spherical_geographic/tc_line_string.rb +70 -0
  139. data/test/spherical_geographic/tc_multi_line_string.rb +67 -0
  140. data/test/spherical_geographic/tc_multi_point.rb +67 -0
  141. data/test/spherical_geographic/tc_multi_polygon.rb +70 -0
  142. data/test/spherical_geographic/tc_point.rb +100 -0
  143. data/test/spherical_geographic/tc_polygon.rb +67 -0
  144. data/test/tc_cartesian_analysis.rb +107 -0
  145. data/test/tc_oneoff.rb +63 -0
  146. data/test/wkrep/tc_wkb_generator.rb +249 -0
  147. data/test/wkrep/tc_wkb_parser.rb +353 -0
  148. data/test/wkrep/tc_wkt_generator.rb +362 -0
  149. data/test/wkrep/tc_wkt_parser.rb +480 -0
  150. metadata +267 -0
@@ -0,0 +1,161 @@
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
+ # Returns a negative value if the point is to the left,
82
+ # a positive value if the point is to the right, or
83
+ # 0 if the point is collinear to the segment.
84
+
85
+ def side(p_)
86
+ px_ = p_.x
87
+ py_ = p_.y
88
+ (@sx - px_) * (@ey - py_) - (@sy - py_) * (@ex - px_)
89
+ end
90
+
91
+
92
+ def tproj(p_)
93
+ if @lensq == 0
94
+ nil
95
+ else
96
+ (@dx * (p_.x - @sx) + @dy * (p_.y - @sy)) / @lensq
97
+ end
98
+ end
99
+
100
+
101
+ def contains_point?(p_)
102
+ if side(p_) == 0
103
+ t_ = tproj(p_)
104
+ t_ && t_ >= 0.0 && t_ <= 1.0
105
+ else
106
+ false
107
+ end
108
+ end
109
+
110
+
111
+ def intersects_segment?(seg_)
112
+ s2_ = seg_.s
113
+ # Handle degenerate cases
114
+ if seg_.degenerate?
115
+ if @lensq == 0
116
+ return @s == s2_
117
+ else
118
+ return contains_point?(s2_)
119
+ end
120
+ elsif @lensq == 0
121
+ return seg_.contains_point?(@s)
122
+ end
123
+ # Both segments have nonzero length.
124
+ sx2_ = s2_.x
125
+ sy2_ = s2_.y
126
+ dx2_ = seg_.dx
127
+ dy2_ = seg_.dy
128
+ denom_ = @dx*dy2_ - @dy*dx2_
129
+ if denom_ == 0
130
+ # Segments are parallel. Make sure they are collinear.
131
+ return false unless side(s2_) == 0
132
+ # 1-D check.
133
+ ts_ = (@dx * (sx2_ - @sx) + @dy * (sy2_ - @sy)) / @lensq
134
+ te_ = (@dx * (sx2_ + dx2_ - @sx) + @dy * (sy2_ + dy2_ - @sy)) / @lensq
135
+ if ts_ < te_
136
+ te_ >= 0.0 && ts_ <= 1.0
137
+ else
138
+ ts_ >= 0.0 && te_ <= 1.0
139
+ end
140
+ else
141
+ # Segments are not parallel. Check the intersection of their
142
+ # containing lines.
143
+ t_ = (dy2_ * (sx2_ - @sx) + dx2_ * (@sy - sy2_)) / denom_
144
+ return false if t_ < 0.0 || t_ > 1.0
145
+ t2_ = (@dy * (sx2_ - @sx) + @dx * (@sy - sy2_)) / denom_
146
+ t2_ >= 0.0 && t2_ <= 1.0
147
+ end
148
+ end
149
+
150
+
151
+ def length
152
+ ::Math.sqrt(@lensq)
153
+ end
154
+
155
+
156
+ end
157
+
158
+
159
+ end
160
+
161
+ end
@@ -0,0 +1,209 @@
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 Factory
46
+
47
+ include Feature::Factory::Instance
48
+
49
+
50
+ # Create a new simple cartesian factory.
51
+ #
52
+ # See ::RGeo::Cartesian::simple_factory for a list of supported options.
53
+
54
+ def initialize(opts_={})
55
+ @has_z = opts_[:has_z_coordinate] ? true : false
56
+ @has_m = opts_[:has_m_coordinate] ? true : false
57
+ @proj4 = opts_[:proj4]
58
+ if CoordSys::Proj4.supported?
59
+ if @proj4.kind_of?(::String) || @proj4.kind_of?(::Hash)
60
+ @proj4 = CoordSys::Proj4.create(@proj4)
61
+ end
62
+ else
63
+ @proj4 = nil
64
+ end
65
+ srid_ = opts_[:srid]
66
+ @coord_sys = opts_[:coord_sys]
67
+ if @coord_sys.kind_of?(::String)
68
+ @coord_sys = CoordSys::CS.create_from_wkt(@coord_sys) rescue nil
69
+ end
70
+ if (!@proj4 || !@coord_sys) && srid_ && (db_ = opts_[:srs_database])
71
+ entry_ = db_.get(srid_.to_i)
72
+ if entry_
73
+ @proj4 ||= entry_.proj4
74
+ @coord_sys ||= entry_.coord_sys
75
+ end
76
+ end
77
+ srid_ ||= @coord_sys.authority_code if @coord_sys
78
+ @srid = srid_.to_i
79
+ end
80
+
81
+
82
+ # Equivalence test.
83
+
84
+ def eql?(rhs_)
85
+ rhs_.is_a?(self.class) && @srid == rhs_.srid && @has_z == rhs_.property(:has_z_coordinate) && @has_m == rhs_.property(:has_m_coordinate)
86
+ end
87
+ alias_method :==, :eql?
88
+
89
+
90
+ # Returns the SRID.
91
+
92
+ def srid
93
+ @srid
94
+ end
95
+
96
+
97
+ # See ::RGeo::Feature::Factory#property
98
+
99
+ def property(name_)
100
+ case name_
101
+ when :has_z_coordinate
102
+ @has_z
103
+ when :has_m_coordinate
104
+ @has_m
105
+ when :is_cartesian
106
+ true
107
+ else
108
+ nil
109
+ end
110
+ end
111
+
112
+
113
+ # See ::RGeo::Feature::Factory#parse_wkt
114
+
115
+ def parse_wkt(str_)
116
+ WKRep::WKTParser.new(self).parse(str_)
117
+ end
118
+
119
+
120
+ # See ::RGeo::Feature::Factory#parse_wkb
121
+
122
+ def parse_wkb(str_)
123
+ WKRep::WKBParser.new(self).parse(str_)
124
+ end
125
+
126
+
127
+ # See ::RGeo::Feature::Factory#point
128
+
129
+ def point(x_, y_, *extra_)
130
+ PointImpl.new(self, x_, y_, *extra_) rescue nil
131
+ end
132
+
133
+
134
+ # See ::RGeo::Feature::Factory#line_string
135
+
136
+ def line_string(points_)
137
+ LineStringImpl.new(self, points_) rescue nil
138
+ end
139
+
140
+
141
+ # See ::RGeo::Feature::Factory#line
142
+
143
+ def line(start_, end_)
144
+ LineImpl.new(self, start_, end_) rescue nil
145
+ end
146
+
147
+
148
+ # See ::RGeo::Feature::Factory#linear_ring
149
+
150
+ def linear_ring(points_)
151
+ LinearRingImpl.new(self, points_) rescue nil
152
+ end
153
+
154
+
155
+ # See ::RGeo::Feature::Factory#polygon
156
+
157
+ def polygon(outer_ring_, inner_rings_=nil)
158
+ PolygonImpl.new(self, outer_ring_, inner_rings_) rescue nil
159
+ end
160
+
161
+
162
+ # See ::RGeo::Feature::Factory#collection
163
+
164
+ def collection(elems_)
165
+ GeometryCollectionImpl.new(self, elems_) rescue nil
166
+ end
167
+
168
+
169
+ # See ::RGeo::Feature::Factory#multi_point
170
+
171
+ def multi_point(elems_)
172
+ MultiPointImpl.new(self, elems_) rescue nil
173
+ end
174
+
175
+
176
+ # See ::RGeo::Feature::Factory#multi_line_string
177
+
178
+ def multi_line_string(elems_)
179
+ MultiLineStringImpl.new(self, elems_) rescue nil
180
+ end
181
+
182
+
183
+ # See ::RGeo::Feature::Factory#multi_polygon
184
+
185
+ def multi_polygon(elems_)
186
+ MultiPolygonImpl.new(self, elems_) rescue nil
187
+ end
188
+
189
+
190
+ # See ::RGeo::Feature::Factory#proj4
191
+
192
+ def proj4
193
+ @proj4
194
+ end
195
+
196
+
197
+ # See ::RGeo::Feature::Factory#coord_sys
198
+
199
+ def coord_sys
200
+ @coord_sys
201
+ end
202
+
203
+
204
+ end
205
+
206
+
207
+ end
208
+
209
+ end
@@ -0,0 +1,173 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Spherical geography feature classes
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
+ class PointImpl # :nodoc:
43
+
44
+
45
+ include ::RGeo::Feature::Point
46
+ include ::RGeo::ImplHelper::BasicGeometryMethods
47
+ include ::RGeo::ImplHelper::BasicPointMethods
48
+ include ::RGeo::Cartesian::GeometryMethods
49
+
50
+
51
+ def distance(rhs_)
52
+ rhs_ = ::RGeo::Feature.cast(rhs_, @factory)
53
+ case rhs_
54
+ when PointImpl
55
+ dx_ = @x - rhs_.x
56
+ dy_ = @y - rhs_.y
57
+ ::Math.sqrt(dx_ * dx_ + dy_ * dy_)
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+
64
+ end
65
+
66
+
67
+ class LineStringImpl # :nodoc:
68
+
69
+
70
+ include ::RGeo::Feature::LineString
71
+ include ::RGeo::ImplHelper::BasicGeometryMethods
72
+ include ::RGeo::ImplHelper::BasicLineStringMethods
73
+ include ::RGeo::Cartesian::GeometryMethods
74
+ include ::RGeo::Cartesian::LineStringMethods
75
+
76
+
77
+ end
78
+
79
+
80
+ class LineImpl # :nodoc:
81
+
82
+
83
+ include ::RGeo::Feature::Line
84
+ include ::RGeo::ImplHelper::BasicGeometryMethods
85
+ include ::RGeo::ImplHelper::BasicLineStringMethods
86
+ include ::RGeo::ImplHelper::BasicLineMethods
87
+ include ::RGeo::Cartesian::GeometryMethods
88
+ include ::RGeo::Cartesian::LineStringMethods
89
+
90
+
91
+ end
92
+
93
+
94
+ class LinearRingImpl # :nodoc:
95
+
96
+
97
+ include ::RGeo::Feature::Line
98
+ include ::RGeo::ImplHelper::BasicGeometryMethods
99
+ include ::RGeo::ImplHelper::BasicLineStringMethods
100
+ include ::RGeo::ImplHelper::BasicLinearRingMethods
101
+ include ::RGeo::Cartesian::GeometryMethods
102
+ include ::RGeo::Cartesian::LineStringMethods
103
+
104
+
105
+ end
106
+
107
+
108
+ class PolygonImpl # :nodoc:
109
+
110
+
111
+ include ::RGeo::Feature::Polygon
112
+ include ::RGeo::ImplHelper::BasicGeometryMethods
113
+ include ::RGeo::ImplHelper::BasicPolygonMethods
114
+ include ::RGeo::Cartesian::GeometryMethods
115
+
116
+
117
+ end
118
+
119
+
120
+ class GeometryCollectionImpl # :nodoc:
121
+
122
+
123
+ include ::RGeo::Feature::GeometryCollection
124
+ include ::RGeo::ImplHelper::BasicGeometryMethods
125
+ include ::RGeo::ImplHelper::BasicGeometryCollectionMethods
126
+ include ::RGeo::Cartesian::GeometryMethods
127
+
128
+
129
+ end
130
+
131
+
132
+ class MultiPointImpl # :nodoc:
133
+
134
+
135
+ include ::RGeo::Feature::GeometryCollection
136
+ include ::RGeo::ImplHelper::BasicGeometryMethods
137
+ include ::RGeo::ImplHelper::BasicGeometryCollectionMethods
138
+ include ::RGeo::ImplHelper::BasicMultiPointMethods
139
+ include ::RGeo::Cartesian::GeometryMethods
140
+
141
+
142
+ end
143
+
144
+
145
+ class MultiLineStringImpl # :nodoc:
146
+
147
+
148
+ include ::RGeo::Feature::GeometryCollection
149
+ include ::RGeo::ImplHelper::BasicGeometryMethods
150
+ include ::RGeo::ImplHelper::BasicGeometryCollectionMethods
151
+ include ::RGeo::ImplHelper::BasicMultiLineStringMethods
152
+ include ::RGeo::Cartesian::GeometryMethods
153
+
154
+
155
+ end
156
+
157
+
158
+ class MultiPolygonImpl # :nodoc:
159
+
160
+
161
+ include ::RGeo::Feature::GeometryCollection
162
+ include ::RGeo::ImplHelper::BasicGeometryMethods
163
+ include ::RGeo::ImplHelper::BasicGeometryCollectionMethods
164
+ include ::RGeo::ImplHelper::BasicMultiPolygonMethods
165
+ include ::RGeo::Cartesian::GeometryMethods
166
+
167
+
168
+ end
169
+
170
+
171
+ end
172
+
173
+ end