rgeo-dschee 0.5.4

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 (176) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +29 -0
  3. data/ext/geos_c_impl/coordinates.c +65 -0
  4. data/ext/geos_c_impl/coordinates.h +2 -0
  5. data/ext/geos_c_impl/extconf.rb +43 -0
  6. data/ext/geos_c_impl/factory.c +995 -0
  7. data/ext/geos_c_impl/factory.h +238 -0
  8. data/ext/geos_c_impl/geometry.c +1093 -0
  9. data/ext/geos_c_impl/geometry.h +23 -0
  10. data/ext/geos_c_impl/geometry_collection.c +757 -0
  11. data/ext/geos_c_impl/geometry_collection.h +46 -0
  12. data/ext/geos_c_impl/line_string.c +675 -0
  13. data/ext/geos_c_impl/line_string.h +32 -0
  14. data/ext/geos_c_impl/main.c +40 -0
  15. data/ext/geos_c_impl/point.c +236 -0
  16. data/ext/geos_c_impl/point.h +30 -0
  17. data/ext/geos_c_impl/polygon.c +359 -0
  18. data/ext/geos_c_impl/polygon.h +43 -0
  19. data/ext/geos_c_impl/preface.h +38 -0
  20. data/ext/proj4_c_impl/extconf.rb +62 -0
  21. data/ext/proj4_c_impl/main.c +315 -0
  22. data/lib/rgeo.rb +89 -0
  23. data/lib/rgeo/cartesian.rb +25 -0
  24. data/lib/rgeo/cartesian/analysis.rb +77 -0
  25. data/lib/rgeo/cartesian/bounding_box.rb +398 -0
  26. data/lib/rgeo/cartesian/calculations.rb +113 -0
  27. data/lib/rgeo/cartesian/factory.rb +347 -0
  28. data/lib/rgeo/cartesian/feature_classes.rb +100 -0
  29. data/lib/rgeo/cartesian/feature_methods.rb +88 -0
  30. data/lib/rgeo/cartesian/interface.rb +135 -0
  31. data/lib/rgeo/coord_sys.rb +43 -0
  32. data/lib/rgeo/coord_sys/cs/entities.rb +1315 -0
  33. data/lib/rgeo/coord_sys/cs/factories.rb +148 -0
  34. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +272 -0
  35. data/lib/rgeo/coord_sys/proj4.rb +293 -0
  36. data/lib/rgeo/coord_sys/srs_database/interface.rb +115 -0
  37. data/lib/rgeo/coord_sys/srs_database/proj4_data.rb +140 -0
  38. data/lib/rgeo/coord_sys/srs_database/sr_org.rb +62 -0
  39. data/lib/rgeo/coord_sys/srs_database/url_reader.rb +63 -0
  40. data/lib/rgeo/error.rb +27 -0
  41. data/lib/rgeo/feature.rb +54 -0
  42. data/lib/rgeo/feature/curve.rb +111 -0
  43. data/lib/rgeo/feature/factory.rb +278 -0
  44. data/lib/rgeo/feature/factory_generator.rb +96 -0
  45. data/lib/rgeo/feature/geometry.rb +624 -0
  46. data/lib/rgeo/feature/geometry_collection.rb +95 -0
  47. data/lib/rgeo/feature/line.rb +26 -0
  48. data/lib/rgeo/feature/line_string.rb +60 -0
  49. data/lib/rgeo/feature/linear_ring.rb +26 -0
  50. data/lib/rgeo/feature/mixins.rb +143 -0
  51. data/lib/rgeo/feature/multi_curve.rb +71 -0
  52. data/lib/rgeo/feature/multi_line_string.rb +26 -0
  53. data/lib/rgeo/feature/multi_point.rb +33 -0
  54. data/lib/rgeo/feature/multi_polygon.rb +57 -0
  55. data/lib/rgeo/feature/multi_surface.rb +73 -0
  56. data/lib/rgeo/feature/point.rb +84 -0
  57. data/lib/rgeo/feature/polygon.rb +97 -0
  58. data/lib/rgeo/feature/surface.rb +79 -0
  59. data/lib/rgeo/feature/types.rb +284 -0
  60. data/lib/rgeo/geographic.rb +40 -0
  61. data/lib/rgeo/geographic/factory.rb +450 -0
  62. data/lib/rgeo/geographic/interface.rb +489 -0
  63. data/lib/rgeo/geographic/proj4_projector.rb +58 -0
  64. data/lib/rgeo/geographic/projected_feature_classes.rb +107 -0
  65. data/lib/rgeo/geographic/projected_feature_methods.rb +212 -0
  66. data/lib/rgeo/geographic/projected_window.rb +383 -0
  67. data/lib/rgeo/geographic/simple_mercator_projector.rb +110 -0
  68. data/lib/rgeo/geographic/spherical_feature_classes.rb +100 -0
  69. data/lib/rgeo/geographic/spherical_feature_methods.rb +134 -0
  70. data/lib/rgeo/geographic/spherical_math.rb +188 -0
  71. data/lib/rgeo/geos.rb +89 -0
  72. data/lib/rgeo/geos/capi_factory.rb +470 -0
  73. data/lib/rgeo/geos/capi_feature_classes.rb +129 -0
  74. data/lib/rgeo/geos/ffi_factory.rb +592 -0
  75. data/lib/rgeo/geos/ffi_feature_classes.rb +83 -0
  76. data/lib/rgeo/geos/ffi_feature_methods.rb +574 -0
  77. data/lib/rgeo/geos/interface.rb +202 -0
  78. data/lib/rgeo/geos/utils.rb +74 -0
  79. data/lib/rgeo/geos/zm_factory.rb +405 -0
  80. data/lib/rgeo/geos/zm_feature_classes.rb +80 -0
  81. data/lib/rgeo/geos/zm_feature_methods.rb +344 -0
  82. data/lib/rgeo/impl_helper.rb +19 -0
  83. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +185 -0
  84. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +61 -0
  85. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +146 -0
  86. data/lib/rgeo/impl_helper/basic_point_methods.rb +104 -0
  87. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +87 -0
  88. data/lib/rgeo/impl_helper/math.rb +14 -0
  89. data/lib/rgeo/impl_helper/utils.rb +29 -0
  90. data/lib/rgeo/version.rb +3 -0
  91. data/lib/rgeo/wkrep.rb +37 -0
  92. data/lib/rgeo/wkrep/wkb_generator.rb +201 -0
  93. data/lib/rgeo/wkrep/wkb_parser.rb +251 -0
  94. data/lib/rgeo/wkrep/wkt_generator.rb +207 -0
  95. data/lib/rgeo/wkrep/wkt_parser.rb +415 -0
  96. data/lib/rgeo/yaml.rb +23 -0
  97. data/test/cartesian_analysis_test.rb +65 -0
  98. data/test/cartesian_bbox_test.rb +123 -0
  99. data/test/common/factory_tests.rb +78 -0
  100. data/test/common/geometry_collection_tests.rb +237 -0
  101. data/test/common/line_string_tests.rb +330 -0
  102. data/test/common/multi_line_string_tests.rb +182 -0
  103. data/test/common/multi_point_tests.rb +200 -0
  104. data/test/common/multi_polygon_tests.rb +191 -0
  105. data/test/common/point_tests.rb +370 -0
  106. data/test/common/polygon_tests.rb +261 -0
  107. data/test/coord_sys/ogc_cs_test.rb +342 -0
  108. data/test/coord_sys/proj4_srs_data_test.rb +41 -0
  109. data/test/coord_sys/proj4_test.rb +150 -0
  110. data/test/coord_sys/sr_org_test.rb +32 -0
  111. data/test/coord_sys/url_reader_test.rb +42 -0
  112. data/test/geos_capi/factory_test.rb +31 -0
  113. data/test/geos_capi/geometry_collection_test.rb +24 -0
  114. data/test/geos_capi/line_string_test.rb +24 -0
  115. data/test/geos_capi/misc_test.rb +116 -0
  116. data/test/geos_capi/multi_line_string_test.rb +24 -0
  117. data/test/geos_capi/multi_point_test.rb +24 -0
  118. data/test/geos_capi/multi_polygon_test.rb +39 -0
  119. data/test/geos_capi/parsing_unparsing_test.rb +40 -0
  120. data/test/geos_capi/point_test.rb +72 -0
  121. data/test/geos_capi/polygon_test.rb +154 -0
  122. data/test/geos_capi/zmfactory_test.rb +57 -0
  123. data/test/geos_ffi/factory_test.rb +31 -0
  124. data/test/geos_ffi/geometry_collection_test.rb +24 -0
  125. data/test/geos_ffi/line_string_test.rb +24 -0
  126. data/test/geos_ffi/misc_test.rb +63 -0
  127. data/test/geos_ffi/multi_line_string_test.rb +24 -0
  128. data/test/geos_ffi/multi_point_test.rb +24 -0
  129. data/test/geos_ffi/multi_polygon_test.rb +33 -0
  130. data/test/geos_ffi/parsing_unparsing_test.rb +41 -0
  131. data/test/geos_ffi/point_test.rb +77 -0
  132. data/test/geos_ffi/polygon_test.rb +46 -0
  133. data/test/geos_ffi/zmfactory_test.rb +58 -0
  134. data/test/mixins_test.rb +141 -0
  135. data/test/oneoff_test.rb +26 -0
  136. data/test/projected_geographic/factory_test.rb +25 -0
  137. data/test/projected_geographic/geometry_collection_test.rb +24 -0
  138. data/test/projected_geographic/line_string_test.rb +24 -0
  139. data/test/projected_geographic/multi_line_string_test.rb +26 -0
  140. data/test/projected_geographic/multi_point_test.rb +30 -0
  141. data/test/projected_geographic/multi_polygon_test.rb +25 -0
  142. data/test/projected_geographic/point_test.rb +51 -0
  143. data/test/projected_geographic/polygon_test.rb +24 -0
  144. data/test/simple_cartesian/calculations_test.rb +99 -0
  145. data/test/simple_cartesian/factory_test.rb +27 -0
  146. data/test/simple_cartesian/geometry_collection_test.rb +30 -0
  147. data/test/simple_cartesian/line_string_test.rb +31 -0
  148. data/test/simple_cartesian/multi_line_string_test.rb +28 -0
  149. data/test/simple_cartesian/multi_point_test.rb +31 -0
  150. data/test/simple_cartesian/multi_polygon_test.rb +31 -0
  151. data/test/simple_cartesian/point_test.rb +50 -0
  152. data/test/simple_cartesian/polygon_test.rb +28 -0
  153. data/test/simple_mercator/factory_test.rb +25 -0
  154. data/test/simple_mercator/geometry_collection_test.rb +24 -0
  155. data/test/simple_mercator/line_string_test.rb +24 -0
  156. data/test/simple_mercator/multi_line_string_test.rb +26 -0
  157. data/test/simple_mercator/multi_point_test.rb +29 -0
  158. data/test/simple_mercator/multi_polygon_test.rb +25 -0
  159. data/test/simple_mercator/point_test.rb +55 -0
  160. data/test/simple_mercator/polygon_test.rb +24 -0
  161. data/test/simple_mercator/window_test.rb +173 -0
  162. data/test/spherical_geographic/calculations_test.rb +167 -0
  163. data/test/spherical_geographic/factory_test.rb +27 -0
  164. data/test/spherical_geographic/geometry_collection_test.rb +31 -0
  165. data/test/spherical_geographic/line_string_test.rb +31 -0
  166. data/test/spherical_geographic/multi_line_string_test.rb +29 -0
  167. data/test/spherical_geographic/multi_point_test.rb +31 -0
  168. data/test/spherical_geographic/multi_polygon_test.rb +31 -0
  169. data/test/spherical_geographic/point_test.rb +78 -0
  170. data/test/spherical_geographic/polygon_test.rb +28 -0
  171. data/test/types_test.rb +42 -0
  172. data/test/wkrep/wkb_generator_test.rb +185 -0
  173. data/test/wkrep/wkb_parser_test.rb +293 -0
  174. data/test/wkrep/wkt_generator_test.rb +294 -0
  175. data/test/wkrep/wkt_parser_test.rb +412 -0
  176. metadata +386 -0
@@ -0,0 +1,61 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Basic methods used by geometry objects
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module BasicGeometryMethods # :nodoc:
10
+ include Feature::Instance
11
+
12
+ def inspect # :nodoc:
13
+ "#<#{self.class}:0x#{object_id.to_s(16)} #{as_text.inspect}>"
14
+ end
15
+
16
+ def to_s # :nodoc:
17
+ as_text
18
+ end
19
+
20
+ def _validate_geometry # :nodoc:
21
+ end
22
+
23
+ def _set_factory(factory_) # :nodoc:
24
+ @factory = factory_
25
+ end
26
+
27
+ def factory
28
+ @factory
29
+ end
30
+
31
+ def as_text
32
+ @factory._generate_wkt(self)
33
+ end
34
+
35
+ def as_binary
36
+ @factory._generate_wkb(self)
37
+ end
38
+
39
+ def _copy_state_from(obj_) # :nodoc:
40
+ @factory = obj_.factory
41
+ end
42
+
43
+ def marshal_dump # :nodoc:
44
+ [@factory, @factory._marshal_wkb_generator.generate(self)]
45
+ end
46
+
47
+ def marshal_load(data_) # :nodoc:
48
+ _copy_state_from(data_[0]._marshal_wkb_parser.parse(data_[1]))
49
+ end
50
+
51
+ def encode_with(coder_) # :nodoc:
52
+ coder_["factory"] = @factory
53
+ coder_["wkt"] = @factory._psych_wkt_generator.generate(self)
54
+ end
55
+
56
+ def init_with(coder_) # :nodoc:
57
+ _copy_state_from(coder_["factory"]._psych_wkt_parser.parse(coder_["wkt"]))
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,146 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Common methods for LineString features
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module BasicLineStringMethods # :nodoc:
10
+ def initialize(factory_, points_)
11
+ _set_factory(factory_)
12
+ @points = points_.map do |elem_|
13
+ elem_ = Feature.cast(elem_, factory_, Feature::Point)
14
+ raise Error::InvalidGeometry, "Could not cast #{elem_}" unless elem_
15
+ elem_
16
+ end
17
+ _validate_geometry
18
+ end
19
+
20
+ def _validate_geometry
21
+ if @points.size == 1
22
+ raise Error::InvalidGeometry, "LineString cannot have 1 point"
23
+ end
24
+ end
25
+
26
+ def num_points
27
+ @points.size
28
+ end
29
+
30
+ def point_n(n_)
31
+ n_ < 0 ? nil : @points[n_]
32
+ end
33
+
34
+ def points
35
+ @points.dup
36
+ end
37
+
38
+ def dimension
39
+ 1
40
+ end
41
+
42
+ def geometry_type
43
+ Feature::LineString
44
+ end
45
+
46
+ def is_empty?
47
+ @points.size == 0
48
+ end
49
+
50
+ def boundary
51
+ array_ = []
52
+ array_ << @points.first << @points.last if !is_empty? && !is_closed?
53
+ factory.multi_point([array_])
54
+ end
55
+
56
+ def start_point
57
+ @points.first
58
+ end
59
+
60
+ def end_point
61
+ @points.last
62
+ end
63
+
64
+ def is_closed?
65
+ unless defined?(@is_closed)
66
+ @is_closed = @points.size > 2 && @points.first == @points.last
67
+ end
68
+ @is_closed
69
+ end
70
+
71
+ def is_ring?
72
+ is_closed? && is_simple?
73
+ end
74
+
75
+ def rep_equals?(rhs_)
76
+ if rhs_.is_a?(self.class) && rhs_.factory.eql?(@factory) && @points.size == rhs_.num_points
77
+ rhs_.points.each_with_index { |p_, i_| return false unless @points[i_].rep_equals?(p_) }
78
+ else
79
+ false
80
+ end
81
+ end
82
+
83
+ def hash
84
+ @hash ||= begin
85
+ hash_ = [factory, geometry_type].hash
86
+ @points.inject(hash_) { |h_, p_| (1_664_525 * h_ + p_.hash).hash }
87
+ end
88
+ end
89
+
90
+ def _copy_state_from(obj_) # :nodoc:
91
+ super
92
+ @points = obj_.points
93
+ end
94
+
95
+ def coordinates
96
+ @points.map(&:coordinates)
97
+ end
98
+ end
99
+
100
+ module BasicLineMethods # :nodoc:
101
+ def initialize(factory_, start_, end_)
102
+ _set_factory(factory_)
103
+ cstart_ = Feature.cast(start_, factory_, Feature::Point)
104
+ unless cstart_
105
+ raise Error::InvalidGeometry, "Could not cast start: #{start_}"
106
+ end
107
+ cend_ = Feature.cast(end_, factory_, Feature::Point)
108
+ raise Error::InvalidGeometry, "Could not cast end: #{end_}" unless cend_
109
+ @points = [cstart_, cend_]
110
+ _validate_geometry
111
+ end
112
+
113
+ def _validate_geometry # :nodoc:
114
+ super
115
+ if @points.size > 2
116
+ raise Error::InvalidGeometry, "Line must have 0 or 2 points"
117
+ end
118
+ end
119
+
120
+ def geometry_type
121
+ Feature::Line
122
+ end
123
+
124
+ def coordinates
125
+ @points.map(&:coordinates)
126
+ end
127
+ end
128
+
129
+ module BasicLinearRingMethods # :nodoc:
130
+ def _validate_geometry # :nodoc:
131
+ super
132
+ if @points.size > 0
133
+ @points << @points.first if @points.first != @points.last
134
+ @points = @points.chunk {|x| x}.map(&:first)
135
+ if !@factory.property(:uses_lenient_assertions) && !is_ring?
136
+ raise Error::InvalidGeometry, "LinearRing failed ring test"
137
+ end
138
+ end
139
+ end
140
+
141
+ def geometry_type
142
+ Feature::LinearRing
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,104 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Common methods for Point features
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module BasicPointMethods # :nodoc:
10
+ def initialize(factory_, x_, y_, *extra_)
11
+ _set_factory(factory_)
12
+ @x = x_.to_f
13
+ @y = y_.to_f
14
+ @z = factory_.property(:has_z_coordinate) ? extra_.shift.to_f : nil
15
+ @m = factory_.property(:has_m_coordinate) ? extra_.shift.to_f : nil
16
+ if extra_.size > 0
17
+ raise ::ArgumentError, "Too many arguments for point initializer"
18
+ end
19
+ _validate_geometry
20
+ end
21
+
22
+ def x
23
+ @x
24
+ end
25
+
26
+ def y
27
+ @y
28
+ end
29
+
30
+ def z
31
+ @z
32
+ end
33
+
34
+ def m
35
+ @m
36
+ end
37
+
38
+ def dimension
39
+ 0
40
+ end
41
+
42
+ def geometry_type
43
+ Feature::Point
44
+ end
45
+
46
+ def is_empty?
47
+ false
48
+ end
49
+
50
+ def is_simple?
51
+ true
52
+ end
53
+
54
+ def envelope
55
+ self
56
+ end
57
+
58
+ def boundary
59
+ factory.collection([])
60
+ end
61
+
62
+ def convex_hull
63
+ self
64
+ end
65
+
66
+ def equals?(rhs_)
67
+ return false unless rhs_.is_a?(self.class) && rhs_.factory == factory
68
+ case rhs_
69
+ when Feature::Point
70
+ rhs_.x == @x && rhs_.y == @y
71
+ when Feature::LineString
72
+ rhs_.num_points > 0 && rhs_.points.all? { |elem_| equals?(elem_) }
73
+ when Feature::GeometryCollection
74
+ rhs_.num_geometries > 0 && rhs_.all? { |elem_| equals?(elem_) }
75
+ else
76
+ false
77
+ end
78
+ end
79
+
80
+ def rep_equals?(rhs_)
81
+ rhs_.is_a?(self.class) && rhs_.factory.eql?(@factory) && @x == rhs_.x && @y == rhs_.y && @z == rhs_.z && @m == rhs_.m
82
+ end
83
+
84
+ def hash
85
+ @hash ||= [factory, geometry_type, @x, @y, @z, @m].hash
86
+ end
87
+
88
+ def _copy_state_from(obj_) # :nodoc:
89
+ super
90
+ @x = obj_.x
91
+ @y = obj_.y
92
+ @z = obj_.z
93
+ @m = obj_.m
94
+ end
95
+
96
+ def coordinates
97
+ [x, y].tap do |coords|
98
+ coords << z if factory.property(:has_z_coordinate)
99
+ coords << m if factory.property(:has_m_coordinate)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,87 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Common methods for Polygon features
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module BasicPolygonMethods # :nodoc:
10
+ def initialize(factory_, exterior_ring_, interior_rings_)
11
+ _set_factory(factory_)
12
+ @exterior_ring = Feature.cast(exterior_ring_, factory_, Feature::LinearRing)
13
+ unless @exterior_ring
14
+ raise Error::InvalidGeometry, "Failed to cast exterior ring #{exterior_ring_}"
15
+ end
16
+ @interior_rings = (interior_rings_ || []).map do |elem_|
17
+ elem_ = Feature.cast(elem_, factory_, Feature::LinearRing)
18
+ unless elem_
19
+ raise Error::InvalidGeometry, "Could not cast interior ring #{elem_}"
20
+ end
21
+ elem_
22
+ end
23
+ _validate_geometry
24
+ end
25
+
26
+ def exterior_ring
27
+ @exterior_ring
28
+ end
29
+
30
+ def num_interior_rings
31
+ @interior_rings.size
32
+ end
33
+
34
+ def interior_ring_n(n_)
35
+ n_ < 0 ? nil : @interior_rings[n_]
36
+ end
37
+
38
+ def interior_rings
39
+ @interior_rings.dup
40
+ end
41
+
42
+ def dimension
43
+ 2
44
+ end
45
+
46
+ def geometry_type
47
+ Feature::Polygon
48
+ end
49
+
50
+ def is_empty?
51
+ @exterior_ring.is_empty?
52
+ end
53
+
54
+ def boundary
55
+ array_ = []
56
+ array_ << @exterior_ring unless @exterior_ring.is_empty?
57
+ array_.concat(@interior_rings)
58
+ factory.multi_line_string(array_)
59
+ end
60
+
61
+ def rep_equals?(rhs_)
62
+ if rhs_.is_a?(self.class) && rhs_.factory.eql?(@factory) && @exterior_ring.rep_equals?(rhs_.exterior_ring) && @interior_rings.size == rhs_.num_interior_rings
63
+ rhs_.interior_rings.each_with_index { |r_, i_| return false unless @interior_rings[i_].rep_equals?(r_) }
64
+ else
65
+ false
66
+ end
67
+ end
68
+
69
+ def hash
70
+ @hash ||= begin
71
+ hash_ = [geometry_type, @exterior_ring].hash
72
+ @interior_rings.inject(hash_) { |h_, r_| (1_664_525 * h_ + r_.hash).hash }
73
+ end
74
+ end
75
+
76
+ def _copy_state_from(obj_) # :nodoc:
77
+ super
78
+ @exterior_ring = obj_.exterior_ring
79
+ @interior_rings = obj_.interior_rings
80
+ end
81
+
82
+ def coordinates
83
+ ([@exterior_ring] + @interior_rings).map(&:coordinates)
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,14 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Math constants and tools
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module Math # :nodoc:
10
+ RADIANS_PER_DEGREE = ::Math::PI / 180.0
11
+ DEGREES_PER_RADIAN = 180.0 / ::Math::PI
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Math constants and tools
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+
7
+ module RGeo
8
+ module ImplHelper # :nodoc:
9
+ module Utils # :nodoc:
10
+ class << self
11
+ def stringize_hash(hash_)
12
+ nhash_ = {}
13
+ hash_.each do |k_, v_|
14
+ nhash_[k_.is_a?(::Symbol) ? k_.to_s : k_] = v_.is_a?(::Symbol) ? v_.to_s : v_
15
+ end
16
+ nhash_
17
+ end
18
+
19
+ def symbolize_hash(hash_)
20
+ nhash_ = {}
21
+ hash_.each do |k_, v_|
22
+ nhash_[k_.is_a?(::String) ? k_.to_sym : k_] = v_.is_a?(::String) ? v_.to_sym : v_
23
+ end
24
+ nhash_
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end