rgeo 0.3.5 → 0.3.6

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 (43) hide show
  1. data/History.rdoc +11 -0
  2. data/Version +1 -1
  3. data/ext/geos_c_impl/factory.c +134 -3
  4. data/ext/geos_c_impl/factory.h +5 -0
  5. data/ext/geos_c_impl/geometry_collection.c +18 -12
  6. data/lib/rgeo/cartesian/factory.rb +40 -33
  7. data/lib/rgeo/cartesian/interface.rb +6 -0
  8. data/lib/rgeo/coord_sys/cs/entities.rb +4 -4
  9. data/lib/rgeo/coord_sys/proj4.rb +5 -5
  10. data/lib/rgeo/coord_sys/srs_database/active_record_table.rb +5 -3
  11. data/lib/rgeo/feature/geometry.rb +8 -1
  12. data/lib/rgeo/geographic/factory.rb +124 -1
  13. data/lib/rgeo/geographic/interface.rb +6 -0
  14. data/lib/rgeo/geographic/proj4_projector.rb +6 -0
  15. data/lib/rgeo/geographic/simple_mercator_projector.rb +6 -0
  16. data/lib/rgeo/geos/factory.rb +119 -18
  17. data/lib/rgeo/geos/ffi_classes.rb +10 -5
  18. data/lib/rgeo/geos/ffi_factory.rb +106 -5
  19. data/lib/rgeo/geos/interface.rb +0 -2
  20. data/lib/rgeo/geos/zm_factory.rb +106 -2
  21. data/lib/rgeo/geos/zm_impl.rb +3 -2
  22. data/lib/rgeo/impl_helper.rb +1 -0
  23. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +1 -1
  24. data/lib/rgeo/impl_helper/utils.rb +67 -0
  25. data/lib/rgeo/wkrep/wkb_generator.rb +4 -4
  26. data/lib/rgeo/wkrep/wkb_parser.rb +4 -4
  27. data/lib/rgeo/wkrep/wkt_generator.rb +4 -4
  28. data/lib/rgeo/wkrep/wkt_parser.rb +5 -5
  29. data/test/common/factory_tests.rb +117 -0
  30. data/test/common/geometry_collection_tests.rb +25 -0
  31. data/test/coord_sys/tc_active_record_table.rb +4 -5
  32. data/test/coord_sys/tc_ogc_cs.rb +0 -6
  33. data/test/coord_sys/tc_proj4.rb +4 -6
  34. data/test/geos_capi/tc_factory.rb +5 -33
  35. data/test/geos_capi/tc_zmfactory.rb +6 -0
  36. data/test/geos_ffi/tc_factory.rb +5 -33
  37. data/test/geos_ffi/tc_zmfactory.rb +6 -0
  38. data/test/projected_geographic/tc_factory.rb +63 -0
  39. data/test/simple_cartesian/tc_factory.rb +66 -0
  40. data/test/simple_mercator/tc_factory.rb +63 -0
  41. data/test/spherical_geographic/tc_factory.rb +66 -0
  42. data/test/tc_types.rb +4 -0
  43. metadata +12 -2
@@ -56,8 +56,8 @@ module RGeo
56
56
  # Main flags
57
57
  @uses_lenient_multi_polygon_assertions = opts_[:lenient_multi_polygon_assertions] ||
58
58
  opts_[:uses_lenient_multi_polygon_assertions]
59
- @has_z = opts_[:has_z_coordinate]
60
- @has_m = opts_[:has_m_coordinate]
59
+ @has_z = opts_[:has_z_coordinate] ? true : false
60
+ @has_m = opts_[:has_m_coordinate] ? true : false
61
61
  if @has_z && @has_m
62
62
  raise Error::UnsupportedOperation, "GEOS cannot support both Z and M coordinates at the same time."
63
63
  end
@@ -132,7 +132,7 @@ module RGeo
132
132
  wkb_parser_ = opts_[:wkb_parser]
133
133
  case wkb_parser_
134
134
  when :geos
135
- @wkb_reader = ::Geos::WktReader.new
135
+ @wkb_reader = ::Geos::WkbReader.new
136
136
  @wkb_parser = nil
137
137
  when ::Hash
138
138
  @wkb_parser = WKRep::WKBParser.new(self, wkb_parser_)
@@ -159,6 +159,107 @@ module RGeo
159
159
  alias_method :==, :eql?
160
160
 
161
161
 
162
+ # Marshal support
163
+
164
+ def marshal_dump # :nodoc:
165
+ hash_ = {
166
+ 'hasz' => @has_z,
167
+ 'hasm' => @has_m,
168
+ 'srid' => @srid,
169
+ 'bufr' => @buffer_resolution,
170
+ 'wktg' => @wkt_generator._properties,
171
+ 'wkbg' => @wkb_generator._properties,
172
+ 'wktp' => @wkt_parser._properties,
173
+ 'wkbp' => @wkb_parser._properties,
174
+ 'lmpa' => @uses_lenient_multi_polygon_assertions,
175
+ 'apre' => @_auto_prepare,
176
+ }
177
+ hash_['proj4'] = @proj4.marshal_dump if @proj4
178
+ hash_['cs'] = @coord_sys.to_wkt if @coord_sys
179
+ hash_
180
+ end
181
+
182
+ def marshal_load(data_) # :nodoc:
183
+ if CoordSys::Proj4.supported? && (proj4_data_ = data_['proj4'])
184
+ proj4_ = CoordSys::Proj4.allocate
185
+ proj4_.marshal_load(proj4_data_)
186
+ else
187
+ proj4_ = nil
188
+ end
189
+ if (coord_sys_data_ = data_['cs'])
190
+ coord_sys_ = CoordSys::CS.create_from_wkt(coord_sys_data_)
191
+ else
192
+ coord_sys_ = nil
193
+ end
194
+ initialize(
195
+ :has_z_coordinate => data_['hasz'],
196
+ :has_m_coordinate => data_['hasm'],
197
+ :srid => data_['srid'],
198
+ :buffer_resolution => data_['bufr'],
199
+ :wkt_generator => ImplHelper::Utils.symbolize_hash(data_['wktg']),
200
+ :wkb_generator => ImplHelper::Utils.symbolize_hash(data_['wkbg']),
201
+ :wkt_parser => ImplHelper::Utils.symbolize_hash(data_['wktp']),
202
+ :wkb_parser => ImplHelper::Utils.symbolize_hash(data_['wkbp']),
203
+ :uses_lenient_multi_polygon_assertions => data_['lmpa'],
204
+ :auto_prepare => (data_['apre'] ? :simple : :disabled),
205
+ :proj4 => proj4_,
206
+ :coord_sys => coord_sys_
207
+ )
208
+ end
209
+
210
+
211
+ # Psych support
212
+
213
+ def encode_with(coder_) # :nodoc:
214
+ coder_['has_z_coordinate'] = @has_z
215
+ coder_['has_m_coordinate'] = @has_m
216
+ coder_['srid'] = @srid
217
+ coder_['buffer_resolution'] = @buffer_resolution
218
+ coder_['lenient_multi_polygon_assertions'] = @uses_lenient_multi_polygon_assertions
219
+ coder_['wkt_generator'] = @wkt_generator._properties
220
+ coder_['wkb_generator'] = @wkb_generator._properties
221
+ coder_['wkt_parser'] = @wkt_parser._properties
222
+ coder_['wkb_parser'] = @wkb_parser._properties
223
+ coder_['auto_prepare'] = @_auto_prepare ? 'simple' : 'disabled'
224
+ if @proj4
225
+ str_ = @proj4.original_str || @proj4.canonical_str
226
+ coder_['proj4'] = @proj4.radians? ? {'proj4' => str_, 'radians' => true} : str_
227
+ end
228
+ coder_['coord_sys'] = @coord_sys.to_wkt if @coord_sys
229
+ end
230
+
231
+ def init_with(coder_) # :nodoc:
232
+ if (proj4_data_ = coder_['proj4'])
233
+ if proj4_data_.is_a?(::Hash)
234
+ proj4_ = CoordSys::Proj4.create(proj4_data_['proj4'], :radians => proj4_data_['radians'])
235
+ else
236
+ proj4_ = CoordSys::Proj4.create(proj4_data_.to_s)
237
+ end
238
+ else
239
+ proj4_ = nil
240
+ end
241
+ if (coord_sys_data_ = coder_['cs'])
242
+ coord_sys_ = CoordSys::CS.create_from_wkt(coord_sys_data_.to_s)
243
+ else
244
+ coord_sys_ = nil
245
+ end
246
+ initialize(
247
+ :has_z_coordinate => coder_['has_z_coordinate'],
248
+ :has_m_coordinate => coder_['has_m_coordinate'],
249
+ :srid => coder_['srid'],
250
+ :buffer_resolution => coder_['buffer_resolution'],
251
+ :wkt_generator => ImplHelper::Utils.symbolize_hash(coder_['wkt_generator']),
252
+ :wkb_generator => ImplHelper::Utils.symbolize_hash(coder_['wkb_generator']),
253
+ :wkt_parser => ImplHelper::Utils.symbolize_hash(coder_['wkt_parser']),
254
+ :wkb_parser => ImplHelper::Utils.symbolize_hash(coder_['wkb_parser']),
255
+ :auto_prepare => coder_['auto_prepare'] == 'disabled' ? :disabled : :simple,
256
+ :uses_lenient_multi_polygon_assertions => coder_['lenient_multi_polygon_assertions'],
257
+ :proj4 => proj4_,
258
+ :coord_sys => coord_sys_
259
+ )
260
+ end
261
+
262
+
162
263
  # Returns the SRID of geometries created by this factory.
163
264
 
164
265
  def srid
@@ -207,7 +308,7 @@ module RGeo
207
308
 
208
309
  def parse_wkt(str_)
209
310
  if @wkt_reader
210
- @wkt_reader.read(str_)
311
+ wrap_fg_geom(@wkt_reader.read(str_))
211
312
  else
212
313
  @wkt_parser.parse(str_)
213
314
  end
@@ -218,7 +319,7 @@ module RGeo
218
319
 
219
320
  def parse_wkb(str_)
220
321
  if @wkb_reader
221
- @wkb_reader.read(str_)
322
+ wrap_fg_geom(@wkb_reader.read(str_))
222
323
  else
223
324
  @wkb_parser.parse(str_)
224
325
  end
@@ -195,8 +195,6 @@ module RGeo
195
195
  # operation that would benefit from it is called. The latter
196
196
  # never automatically generates a prepared geometry (unless you
197
197
  # generate one explicitly using the <tt>prepare!</tt> method).
198
- # Currently, prepared geometries are supported under CAPI but
199
- # not FFI.
200
198
 
201
199
  def factory(opts_={})
202
200
  if supported?
@@ -74,8 +74,9 @@ module RGeo
74
74
  end
75
75
  srid_ ||= coord_sys_.authority_code if coord_sys_
76
76
  config_ = {
77
- :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions],
78
- :buffer_resolution => opts_[:buffer_resolution],
77
+ :uses_lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions] ||
78
+ opts_[:uses_lenient_multi_polygon_assertions],
79
+ :buffer_resolution => opts_[:buffer_resolution], :auto_prepare => opts_[:auto_prepare],
79
80
  :wkt_generator => opts_[:wkt_generator], :wkt_parser => opts_[:wkt_parser],
80
81
  :wkb_generator => opts_[:wkb_generator], :wkb_parser => opts_[:wkb_parser],
81
82
  :srid => srid_.to_i, :proj4 => proj4_, :coord_sys => coord_sys_,
@@ -120,6 +121,109 @@ module RGeo
120
121
  end
121
122
 
122
123
 
124
+ # Marshal support
125
+
126
+ def marshal_dump # :nodoc:
127
+ hash_ = {
128
+ 'srid' => @zfactory.srid,
129
+ 'bufr' => @zfactory.buffer_resolution,
130
+ 'wktg' => @wkt_generator._properties,
131
+ 'wkbg' => @wkb_generator._properties,
132
+ 'wktp' => @wkt_parser._properties,
133
+ 'wkbp' => @wkb_parser._properties,
134
+ 'lmpa' => @zfactory.lenient_multi_polygon_assertions?,
135
+ 'apre' => @zfactory.property(:auto_prepare) == :simple,
136
+ 'nffi' => @zfactory.is_a?(FFIFactory),
137
+ }
138
+ proj4_ = @zfactory.proj4
139
+ coord_sys_ = @zfactory.coord_sys
140
+ hash_['proj4'] = proj4_.marshal_dump if proj4_
141
+ hash_['cs'] = coord_sys_.to_wkt if coord_sys_
142
+ hash_
143
+ end
144
+
145
+ def marshal_load(data_) # :nodoc:
146
+ if CoordSys::Proj4.supported? && (proj4_data_ = data_['proj4'])
147
+ proj4_ = CoordSys::Proj4.allocate
148
+ proj4_.marshal_load(proj4_data_)
149
+ else
150
+ proj4_ = nil
151
+ end
152
+ if (coord_sys_data_ = data_['cs'])
153
+ coord_sys_ = CoordSys::CS.create_from_wkt(coord_sys_data_)
154
+ else
155
+ coord_sys_ = nil
156
+ end
157
+ initialize(
158
+ :native_interface => (data_['nffi'] ? :ffi : :capi),
159
+ :has_z_coordinate => data_['hasz'],
160
+ :has_m_coordinate => data_['hasm'],
161
+ :srid => data_['srid'],
162
+ :buffer_resolution => data_['bufr'],
163
+ :wkt_generator => ImplHelper::Utils.symbolize_hash(data_['wktg']),
164
+ :wkb_generator => ImplHelper::Utils.symbolize_hash(data_['wkbg']),
165
+ :wkt_parser => ImplHelper::Utils.symbolize_hash(data_['wktp']),
166
+ :wkb_parser => ImplHelper::Utils.symbolize_hash(data_['wkbp']),
167
+ :uses_lenient_multi_polygon_assertions => data_['lmpa'],
168
+ :auto_prepare => (data_['apre'] ? :simple : :disabled),
169
+ :proj4 => proj4_,
170
+ :coord_sys => coord_sys_
171
+ )
172
+ end
173
+
174
+
175
+ # Psych support
176
+
177
+ def encode_with(coder_) # :nodoc:
178
+ coder_['srid'] = @zfactory.srid
179
+ coder_['buffer_resolution'] = @zfactory.buffer_resolution
180
+ coder_['lenient_multi_polygon_assertions'] = @zfactory.lenient_multi_polygon_assertions?
181
+ coder_['wkt_generator'] = @wkt_generator._properties
182
+ coder_['wkb_generator'] = @wkb_generator._properties
183
+ coder_['wkt_parser'] = @wkt_parser._properties
184
+ coder_['wkb_parser'] = @wkb_parser._properties
185
+ coder_['auto_prepare'] = @zfactory.property(:auto_prepare).to_s
186
+ coder_['native_interface'] = @zfactory.is_a?(FFIFactory) ? 'ffi' : 'capi'
187
+ if @proj4
188
+ str_ = @proj4.original_str || @proj4.canonical_str
189
+ coder_['proj4'] = @proj4.radians? ? {'proj4' => str_, 'radians' => true} : str_
190
+ end
191
+ coder_['coord_sys'] = @coord_sys.to_wkt if @coord_sys
192
+ end
193
+
194
+ def init_with(coder_) # :nodoc:
195
+ if (proj4_data_ = coder_['proj4'])
196
+ if proj4_data_.is_a?(::Hash)
197
+ proj4_ = CoordSys::Proj4.create(proj4_data_['proj4'], :radians => proj4_data_['radians'])
198
+ else
199
+ proj4_ = CoordSys::Proj4.create(proj4_data_.to_s)
200
+ end
201
+ else
202
+ proj4_ = nil
203
+ end
204
+ if (coord_sys_data_ = coder_['cs'])
205
+ coord_sys_ = CoordSys::CS.create_from_wkt(coord_sys_data_.to_s)
206
+ else
207
+ coord_sys_ = nil
208
+ end
209
+ initialize(
210
+ :native_interface => coder_['native_interface'] == 'ffi' ? :ffi : :capi,
211
+ :has_z_coordinate => coder_['has_z_coordinate'],
212
+ :has_m_coordinate => coder_['has_m_coordinate'],
213
+ :srid => coder_['srid'],
214
+ :buffer_resolution => coder_['buffer_resolution'],
215
+ :wkt_generator => ImplHelper::Utils.symbolize_hash(coder_['wkt_generator']),
216
+ :wkb_generator => ImplHelper::Utils.symbolize_hash(coder_['wkb_generator']),
217
+ :wkt_parser => ImplHelper::Utils.symbolize_hash(coder_['wkt_parser']),
218
+ :wkb_parser => ImplHelper::Utils.symbolize_hash(coder_['wkb_parser']),
219
+ :auto_prepare => coder_['auto_prepare'] == 'disabled' ? :disabled : :simple,
220
+ :uses_lenient_multi_polygon_assertions => coder_['lenient_multi_polygon_assertions'],
221
+ :proj4 => proj4_,
222
+ :coord_sys => coord_sys_
223
+ )
224
+ end
225
+
226
+
123
227
  # Returns the SRID of geometries created by this factory.
124
228
 
125
229
  def srid
@@ -160,9 +160,10 @@ module RGeo
160
160
  end
161
161
 
162
162
 
163
- def relate(rhs_, pattern_)
164
- @zgeometry.relate(rhs_, pattern_)
163
+ def relate?(rhs_, pattern_)
164
+ @zgeometry.relate?(rhs_, pattern_)
165
165
  end
166
+ alias_method :relate, :relate? # DEPRECATED
166
167
 
167
168
 
168
169
  def distance(rhs_)
@@ -45,6 +45,7 @@ end
45
45
 
46
46
 
47
47
  # Implementation files
48
+ require 'rgeo/impl_helper/utils'
48
49
  require 'rgeo/impl_helper/math'
49
50
  require 'rgeo/impl_helper/basic_geometry_methods'
50
51
  require 'rgeo/impl_helper/basic_geometry_collection_methods'
@@ -177,7 +177,7 @@ module RGeo
177
177
  super
178
178
  if @points.size > 0
179
179
  @points << @points.first if @points.first != @points.last
180
- if !is_ring?
180
+ if !@factory.property(:uses_lenient_assertions) && !is_ring?
181
181
  raise Error::InvalidGeometry, 'LinearRing failed ring test'
182
182
  end
183
183
  end
@@ -0,0 +1,67 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Math constants and tools
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+ # Copyright 2010-2012 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 ImplHelper # :nodoc:
40
+
41
+ module Utils # :nodoc:
42
+
43
+ class << self
44
+
45
+ def stringize_hash(hash_)
46
+ nhash_ = {}
47
+ hash_.each do |k_, v_|
48
+ nhash_[k_.is_a?(::Symbol) ? k_.to_s : k_] = v_.is_a?(::Symbol) ? v_.to_s : v_
49
+ end
50
+ nhash_
51
+ end
52
+
53
+ def symbolize_hash(hash_)
54
+ nhash_ = {}
55
+ hash_.each do |k_, v_|
56
+ nhash_[k_.is_a?(::String) ? k_.to_sym : k_] = v_.is_a?(::String) ? v_.to_sym : v_
57
+ end
58
+ nhash_
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -125,10 +125,10 @@ module RGeo
125
125
 
126
126
  def _properties # :nodoc:
127
127
  {
128
- :type_format => @type_format,
129
- :emit_ewkb_srid => @emit_ewkb_srid,
130
- :hex_format => @hex_format,
131
- :little_endian => @little_endian,
128
+ 'type_format' => @type_format.to_s,
129
+ 'emit_ewkb_srid' => @emit_ewkb_srid,
130
+ 'hex_format' => @hex_format,
131
+ 'little_endian' => @little_endian,
132
132
  }
133
133
  end
134
134
 
@@ -130,10 +130,10 @@ module RGeo
130
130
 
131
131
  def _properties # :nodoc:
132
132
  {
133
- :support_ewkb => @support_ewkb,
134
- :support_wkb12 => @support_wkb12,
135
- :ignore_extra_bytes => @ignore_extra_bytes,
136
- :default_srid => @default_srid,
133
+ 'support_ewkb' => @support_ewkb,
134
+ 'support_wkb12' => @support_wkb12,
135
+ 'ignore_extra_bytes' => @ignore_extra_bytes,
136
+ 'default_srid' => @default_srid,
137
137
  }
138
138
  end
139
139
 
@@ -116,10 +116,10 @@ module RGeo
116
116
 
117
117
  def _properties # :nodoc:
118
118
  {
119
- :tag_format => @tag_format,
120
- :emit_ewkt_srid => @emit_ewkt_srid,
121
- :square_brackets => @square_brackets,
122
- :convert_case => @convert_case,
119
+ 'tag_format' => @tag_format.to_s,
120
+ 'emit_ewkt_srid' => @emit_ewkt_srid,
121
+ 'square_brackets' => @square_brackets,
122
+ 'convert_case' => @convert_case ? @convert_case.to_s : nil,
123
123
  }
124
124
  end
125
125
 
@@ -144,11 +144,11 @@ module RGeo
144
144
 
145
145
  def _properties # :nodoc:
146
146
  {
147
- :support_ewkt => @support_ewkt,
148
- :support_wkt12 => @support_wkt12,
149
- :strict_wkt11 => @strict_wkt11,
150
- :ignore_extra_tokens => @ignore_extra_tokens,
151
- :default_srid => @default_srid,
147
+ 'support_ewkt' => @support_ewkt,
148
+ 'support_wkt12' => @support_wkt12,
149
+ 'strict_wkt11' => @strict_wkt11,
150
+ 'ignore_extra_tokens' => @ignore_extra_tokens,
151
+ 'default_srid' => @default_srid,
152
152
  }
153
153
  end
154
154
 
@@ -0,0 +1,117 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Common tests for geometry collection implementations
4
+ #
5
+ # -----------------------------------------------------------------------------
6
+ # Copyright 2010-2012 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
+ require 'rgeo'
38
+
39
+
40
+ module RGeo
41
+ module Tests # :nodoc:
42
+ module Common # :nodoc:
43
+
44
+ module FactoryTests # :nodoc:
45
+
46
+
47
+ def _srid
48
+ defined?(@srid) ? @srid : 0
49
+ end
50
+
51
+
52
+ def test_srid_preserved_through_factory
53
+ geom_ = @factory.point(-10, 20)
54
+ assert_equal(_srid, geom_.srid)
55
+ factory_ = geom_.factory
56
+ assert_equal(_srid, factory_.srid)
57
+ geom2_ = factory_.point(-20, 25)
58
+ assert_equal(_srid, geom2_.srid)
59
+ end
60
+
61
+
62
+ def test_srid_preserved_through_geom_operations
63
+ geom1_ = @factory.point(-10, 20)
64
+ geom2_ = @factory.point(-20, 25)
65
+ geom3_ = geom1_.union(geom2_)
66
+ assert_equal(_srid, geom3_.srid)
67
+ assert_equal(_srid, geom3_.geometry_n(0).srid)
68
+ assert_equal(_srid, geom3_.geometry_n(1).srid)
69
+ end
70
+
71
+
72
+ def test_srid_preserved_through_geom_functions
73
+ geom1_ = @factory.point(-10, 20)
74
+ geom2_ = geom1_.boundary
75
+ assert_equal(_srid, geom2_.srid)
76
+ end
77
+
78
+
79
+ def test_srid_preserved_through_dup
80
+ geom1_ = @factory.point(-10, 20)
81
+ geom2_ = geom1_.clone
82
+ assert_equal(_srid, geom2_.srid)
83
+ end
84
+
85
+
86
+ def test_dup_factory
87
+ dup_factory_ = @factory.dup
88
+ assert_equal(@factory, dup_factory_)
89
+ assert_equal(_srid, dup_factory_.srid)
90
+ end
91
+
92
+
93
+ def test_marshal_dump_load_factory
94
+ data_ = ::Marshal.dump(@factory)
95
+ factory2_ = ::Marshal.load(data_)
96
+ assert_equal(@factory, factory2_)
97
+ assert_equal(_srid, factory2_.srid)
98
+ end
99
+
100
+
101
+ if ::RGeo.yaml_supported?
102
+
103
+ def test_psych_dump_load_factory
104
+ data_ = ::Psych.dump(@factory)
105
+ factory2_ = ::Psych.load(data_)
106
+ assert_equal(@factory, factory2_)
107
+ assert_equal(_srid, factory2_.srid)
108
+ end
109
+
110
+ end
111
+
112
+
113
+ end
114
+
115
+ end
116
+ end
117
+ end