rgeo 0.2.9 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/History.rdoc +11 -0
  2. data/README.rdoc +3 -3
  3. data/Spatial_Programming_With_RGeo.rdoc +19 -8
  4. data/Version +1 -1
  5. data/ext/geos_c_impl/factory.c +1 -0
  6. data/ext/geos_c_impl/factory.h +1 -0
  7. data/ext/geos_c_impl/geometry.c +4 -5
  8. data/ext/geos_c_impl/geometry_collection.c +15 -0
  9. data/ext/geos_c_impl/line_string.c +10 -0
  10. data/ext/geos_c_impl/point.c +2 -0
  11. data/ext/geos_c_impl/polygon.c +4 -0
  12. data/lib/rgeo/cartesian/feature_classes.rb +23 -17
  13. data/lib/rgeo/cartesian/feature_methods.rb +20 -1
  14. data/lib/rgeo/feature.rb +1 -0
  15. data/lib/rgeo/feature/curve.rb +1 -2
  16. data/lib/rgeo/feature/geometry_collection.rb +1 -1
  17. data/lib/rgeo/feature/line.rb +1 -1
  18. data/lib/rgeo/feature/line_string.rb +1 -2
  19. data/lib/rgeo/feature/linear_ring.rb +1 -2
  20. data/lib/rgeo/feature/mixins.rb +198 -0
  21. data/lib/rgeo/feature/multi_curve.rb +1 -2
  22. data/lib/rgeo/feature/multi_line_string.rb +1 -2
  23. data/lib/rgeo/feature/multi_point.rb +1 -2
  24. data/lib/rgeo/feature/multi_polygon.rb +1 -2
  25. data/lib/rgeo/feature/multi_surface.rb +1 -2
  26. data/lib/rgeo/feature/point.rb +1 -2
  27. data/lib/rgeo/feature/polygon.rb +1 -3
  28. data/lib/rgeo/feature/surface.rb +1 -2
  29. data/lib/rgeo/feature/types.rb +27 -0
  30. data/lib/rgeo/geographic/projected_feature_classes.rb +31 -4
  31. data/lib/rgeo/geographic/projected_feature_methods.rb +2 -1
  32. data/lib/rgeo/geographic/spherical_feature_classes.rb +30 -3
  33. data/lib/rgeo/geos.rb +22 -0
  34. data/lib/rgeo/geos/factory.rb +11 -5
  35. data/lib/rgeo/geos/ffi_classes.rb +655 -0
  36. data/lib/rgeo/geos/ffi_factory.rb +503 -0
  37. data/lib/rgeo/geos/impl_additions.rb +1 -1
  38. data/lib/rgeo/geos/interface.rb +63 -8
  39. data/lib/rgeo/geos/zm_factory.rb +10 -4
  40. data/test/common/geometry_collection_tests.rb +1 -3
  41. data/test/coord_sys/tc_ogc_cs.rb +13 -2
  42. data/test/coord_sys/tc_proj4_srs_data.rb +1 -1
  43. data/test/{geos → geos_capi}/tc_factory.rb +2 -2
  44. data/test/{geos → geos_capi}/tc_geometry_collection.rb +2 -2
  45. data/test/{geos → geos_capi}/tc_line_string.rb +2 -2
  46. data/test/{geos → geos_capi}/tc_misc.rb +6 -2
  47. data/test/{geos → geos_capi}/tc_multi_line_string.rb +2 -2
  48. data/test/{geos → geos_capi}/tc_multi_point.rb +2 -2
  49. data/test/{geos → geos_capi}/tc_multi_polygon.rb +2 -2
  50. data/test/{geos → geos_capi}/tc_parsing_unparsing.rb +2 -2
  51. data/test/{geos → geos_capi}/tc_point.rb +2 -2
  52. data/test/{geos → geos_capi}/tc_polygon.rb +2 -2
  53. data/test/{geos → geos_capi}/tc_zmfactory.rb +2 -2
  54. data/test/geos_ffi/tc_factory.rb +91 -0
  55. data/test/geos_ffi/tc_geometry_collection.rb +62 -0
  56. data/test/geos_ffi/tc_line_string.rb +62 -0
  57. data/test/geos_ffi/tc_misc.rb +69 -0
  58. data/test/geos_ffi/tc_multi_line_string.rb +62 -0
  59. data/test/geos_ffi/tc_multi_point.rb +62 -0
  60. data/test/geos_ffi/tc_multi_polygon.rb +64 -0
  61. data/test/geos_ffi/tc_parsing_unparsing.rb +81 -0
  62. data/test/geos_ffi/tc_point.rb +87 -0
  63. data/test/geos_ffi/tc_polygon.rb +86 -0
  64. data/test/geos_ffi/tc_zmfactory.rb +86 -0
  65. data/test/tc_mixins.rb +188 -0
  66. data/test/tc_types.rb +77 -0
  67. metadata +54 -25
@@ -53,7 +53,7 @@ module RGeo
53
53
 
54
54
 
55
55
  # :stopdoc:
56
- if ::RGeo::Geos.supported?
56
+ if defined?(::RGeo::Geos::PointImpl)
57
57
  IMPL_CLASSES = {
58
58
  Feature::Point => PointImpl,
59
59
  Feature::LineString => LineStringImpl,
@@ -38,16 +38,48 @@ module RGeo
38
38
 
39
39
  module Geos
40
40
 
41
- @supported = nil
42
-
43
41
  class << self
44
42
 
45
43
 
46
- # Returns true if GEOS implementation is supported.
47
- # If this returns false, GEOS features are not available.
44
+ # Returns true if CAPI GEOS implementation is supported.
45
+
46
+ def capi_supported?
47
+ CAPI_SUPPORTED
48
+ end
49
+
50
+
51
+ # Returns true if FFI GEOS implementation is supported.
52
+
53
+ def ffi_supported?
54
+ FFI_SUPPORTED
55
+ end
56
+
57
+
58
+ # Returns true if any GEOS implementation is supported.
59
+ # If this returns false, GEOS features are not available at all.
48
60
 
49
61
  def supported?
50
- @supported.nil? ? (@supported = Factory.respond_to?(:_create)) : @supported
62
+ FFI_SUPPORTED || CAPI_SUPPORTED
63
+ end
64
+
65
+
66
+ # Returns true if the given feature is a CAPI GEOS feature, or if
67
+ # the given factory is a native GEOS factory.
68
+
69
+ def is_capi_geos?(object_)
70
+ Factory === object_ || GeometryImpl === object_ ||
71
+ ZMFactory === object_ && Factory === object_.z_factory ||
72
+ ZMGeometryImpl === object_ && GeometryImpl === object_.z_geometry
73
+ end
74
+
75
+
76
+ # Returns true if the given feature is an FFI GEOS feature, or if
77
+ # the given factory is an FFI GEOS factory.
78
+
79
+ def is_ffi_geos?(object_)
80
+ FFIFactory === object_ || FFIGeometryImpl === object_ ||
81
+ ZMFactory === object_ && FFIFactory === object_.z_factory ||
82
+ ZMGeometryImpl === object_ && FFIGeometryImpl === object_.z_geometry
51
83
  end
52
84
 
53
85
 
@@ -55,10 +87,25 @@ module RGeo
55
87
  # factory is a GEOS factory.
56
88
 
57
89
  def is_geos?(object_)
58
- supported? && (Factory === object_ || GeometryImpl === object_ || ZMFactory === object_ || ZMGeometryImpl === object_)
90
+ Factory === object_ || GeometryImpl === object_ ||
91
+ FFIFactory === object_ || FFIGeometryImpl === object_ ||
92
+ ZMFactory === object_ || ZMGeometryImpl === object_
59
93
  end
60
94
 
61
95
 
96
+ # The preferred native interface. This is the native interface
97
+ # used by default when a factory is created.
98
+ # Supported values are <tt>:capi</tt> and <tt>:ffi</tt>.
99
+ #
100
+ # This is set automatically when RGeo loads, to <tt>:capi</tt>
101
+ # if the CAPI interface is available, otheriwse to <tt>:ffi</tt>
102
+ # if FFI is available, otherwise to nil if no GEOS interface is
103
+ # available. You can override this setting if you want to prefer
104
+ # FFI over CAPI.
105
+
106
+ attr_accessor :preferred_native_interface
107
+
108
+
62
109
  # Returns a factory for the GEOS implementation.
63
110
  # Returns nil if the GEOS implementation is not supported.
64
111
  #
@@ -71,12 +118,17 @@ module RGeo
71
118
  #
72
119
  # Options include:
73
120
  #
74
- # [<tt>:lenient_multi_polygon_assertions</tt>]
121
+ # [<tt>:native_interface</tt>]
122
+ # Specifies which native interface to use. Possible values are
123
+ # <tt>:capi</tt> and <tt>:ffi</tt>. The default is the value
124
+ # of the preferred_native_interface.
125
+ # [<tt>:uses_lenient_multi_polygon_assertions</tt>]
75
126
  # If set to true, assertion checking on MultiPolygon is disabled.
76
127
  # This may speed up creation of MultiPolygon objects, at the
77
128
  # expense of not doing the proper checking for OGC MultiPolygon
78
129
  # compliance. See RGeo::Feature::MultiPolygon for details on
79
- # the MultiPolygon assertions. Default is false.
130
+ # the MultiPolygon assertions. Default is false. Also called
131
+ # <tt>:lenient_multi_polygon_assertions</tt>.
80
132
  # [<tt>:buffer_resolution</tt>]
81
133
  # The resolution of buffers around geometries created by this
82
134
  # factory. This controls the number of line segments used to
@@ -139,8 +191,11 @@ module RGeo
139
191
 
140
192
  def factory(opts_={})
141
193
  if supported?
194
+ native_interface_ = opts_[:native_interface] || Geos.preferred_native_interface
142
195
  if opts_[:has_z_coordinate] && opts_[:has_m_coordinate]
143
196
  ZMFactory.new(opts_)
197
+ elsif native_interface_ == :ffi
198
+ FFIFactory.new(opts_)
144
199
  else
145
200
  Factory.create(opts_)
146
201
  end
@@ -80,8 +80,14 @@ module RGeo
80
80
  :wkb_generator => opts_[:wkb_generator], :wkb_parser => opts_[:wkb_parser],
81
81
  :srid => srid_.to_i, :proj4 => proj4_, :coord_sys => coord_sys_,
82
82
  }
83
- @zfactory = Factory.create(config_.merge(:has_z_coordinate => true))
84
- @mfactory = Factory.create(config_.merge(:has_m_coordinate => true))
83
+ native_interface_ = opts_[:native_interface] || Geos.preferred_native_interface
84
+ if native_interface_ == :ffi
85
+ @zfactory = FFIFactory.new(config_.merge(:has_z_coordinate => true))
86
+ @mfactory = FFIFactory.new(config_.merge(:has_m_coordinate => true))
87
+ else
88
+ @zfactory = Factory.create(config_.merge(:has_z_coordinate => true))
89
+ @mfactory = Factory.create(config_.merge(:has_m_coordinate => true))
90
+ end
85
91
 
86
92
  wkt_generator_ = opts_[:wkt_generator]
87
93
  case wkt_generator_
@@ -117,7 +123,7 @@ module RGeo
117
123
  # Returns the SRID of geometries created by this factory.
118
124
 
119
125
  def srid
120
- @zfactory._srid
126
+ @zfactory.srid
121
127
  end
122
128
 
123
129
 
@@ -125,7 +131,7 @@ module RGeo
125
131
  # created by this factory
126
132
 
127
133
  def buffer_resolution
128
- @zfactory._buffer_resolution
134
+ @zfactory.buffer_resolution
129
135
  end
130
136
 
131
137
 
@@ -233,9 +233,7 @@ module RGeo
233
233
 
234
234
  def test_empty_collection_boundary
235
235
  empty_ = @factory.collection([])
236
- boundary_ = empty_.boundary
237
- assert_equal(Feature::GeometryCollection, boundary_.geometry_type)
238
- assert_equal(0, boundary_.num_geometries)
236
+ assert_nil(empty_.boundary)
239
237
  end
240
238
 
241
239
 
@@ -45,6 +45,17 @@ module RGeo
45
45
  class TestOgcCs < ::Test::Unit::TestCase # :nodoc:
46
46
 
47
47
 
48
+ # Handle differences in floating-point output.
49
+
50
+ def _lenient_regex_for(str_)
51
+ ::Regexp.new(str_.gsub(/(\d)\.(\d{10,})/) do |m_|
52
+ before_ = $1
53
+ after_ = $2[0,10]
54
+ "#{before_}.#{after_}\\d*"
55
+ end.gsub(/(\.|\[|\]|\(|\)|\$|\^|\||\+)/){ |m_| "\\#{$1}"})
56
+ end
57
+
58
+
48
59
  def test_axis_info_by_value
49
60
  obj_ = ::RGeo::CoordSys::CS::AxisInfo.create('N', ::RGeo::CoordSys::CS::AO_NORTH)
50
61
  assert_equal('N', obj_.name)
@@ -277,7 +288,7 @@ module RGeo
277
288
  assert_nil(obj_.get_axis(1))
278
289
  assert_equal('degree', obj_.get_units(0).name)
279
290
  assert_equal('degree', obj_.get_units(1).name)
280
- assert_equal('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137.0,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', obj_.to_wkt)
291
+ assert_match(_lenient_regex_for('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137.0,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]'), obj_.to_wkt)
281
292
  end
282
293
 
283
294
 
@@ -345,7 +356,7 @@ module RGeo
345
356
  assert_kind_of(::RGeo::CoordSys::CS::ProjectedCoordinateSystem, obj_.head)
346
357
  assert_kind_of(::RGeo::CoordSys::CS::VerticalCoordinateSystem, obj_.tail)
347
358
  assert_equal(3, obj_.dimension)
348
- assert_equal(input_, obj_.to_wkt)
359
+ assert_match(_lenient_regex_for(input_), obj_.to_wkt)
349
360
  end
350
361
 
351
362
 
@@ -73,4 +73,4 @@ module RGeo
73
73
 
74
74
  end
75
75
  end
76
- end
76
+ end if ::RGeo::CoordSys::Proj4.supported?
@@ -40,7 +40,7 @@ require 'rgeo'
40
40
 
41
41
  module RGeo
42
42
  module Tests # :nodoc:
43
- module Geos # :nodoc:
43
+ module GeosCAPI # :nodoc:
44
44
 
45
45
  class TestFactory < ::Test::Unit::TestCase # :nodoc:
46
46
 
@@ -88,4 +88,4 @@ module RGeo
88
88
 
89
89
  end
90
90
  end
91
- end if ::RGeo::Geos.supported?
91
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/geometry_collection_tests.rb', ::File.dirn
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestGeometryCollection < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -59,4 +59,4 @@ module RGeo
59
59
 
60
60
  end
61
61
  end
62
- end if ::RGeo::Geos.supported?
62
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/line_string_tests.rb', ::File.dirname(__FI
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestLineString < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -59,4 +59,4 @@ module RGeo
59
59
 
60
60
  end
61
61
  end
62
- end if ::RGeo::Geos.supported?
62
+ end if ::RGeo::Geos.capi_supported?
@@ -40,7 +40,7 @@ require 'rgeo'
40
40
 
41
41
  module RGeo
42
42
  module Tests # :nodoc:
43
- module Geos # :nodoc:
43
+ module GeosCAPI # :nodoc:
44
44
 
45
45
  class TestMisc < ::Test::Unit::TestCase # :nodoc:
46
46
 
@@ -69,4 +69,8 @@ module RGeo
69
69
 
70
70
  end
71
71
  end
72
- end if ::RGeo::Geos.supported?
72
+ end if ::RGeo::Geos.capi_supported?
73
+
74
+ unless ::RGeo::Geos.capi_supported?
75
+ puts "WARNING: GEOS CAPI support not available. Related tests skipped."
76
+ end
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/multi_line_string_tests.rb', ::File.dirnam
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestMultiLineString < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -59,4 +59,4 @@ module RGeo
59
59
 
60
60
  end
61
61
  end
62
- end if ::RGeo::Geos.supported?
62
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/multi_point_tests.rb', ::File.dirname(__FI
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestMultiPoint < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -59,4 +59,4 @@ module RGeo
59
59
 
60
60
  end
61
61
  end
62
- end if ::RGeo::Geos.supported?
62
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/multi_polygon_tests.rb', ::File.dirname(__
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestMultiPolygon < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -60,4 +60,4 @@ module RGeo
60
60
 
61
61
  end
62
62
  end
63
- end if ::RGeo::Geos.supported?
63
+ end if ::RGeo::Geos.capi_supported?
@@ -40,7 +40,7 @@ require 'rgeo'
40
40
 
41
41
  module RGeo
42
42
  module Tests # :nodoc:
43
- module Geos # :nodoc:
43
+ module GeosCAPI # :nodoc:
44
44
 
45
45
  class TestParsingUnparsing < ::Test::Unit::TestCase # :nodoc:
46
46
 
@@ -77,4 +77,4 @@ module RGeo
77
77
 
78
78
  end
79
79
  end
80
- end if ::RGeo::Geos.supported?
80
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/point_tests.rb', ::File.dirname(__FILE__))
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestPoint < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -83,4 +83,4 @@ module RGeo
83
83
 
84
84
  end
85
85
  end
86
- end if ::RGeo::Geos.supported?
86
+ end if ::RGeo::Geos.capi_supported?
@@ -42,7 +42,7 @@ require ::File.expand_path('../common/polygon_tests.rb', ::File.dirname(__FILE__
42
42
 
43
43
  module RGeo
44
44
  module Tests # :nodoc:
45
- module Geos # :nodoc:
45
+ module GeosCAPI # :nodoc:
46
46
 
47
47
  class TestPolygon < ::Test::Unit::TestCase # :nodoc:
48
48
 
@@ -83,4 +83,4 @@ module RGeo
83
83
 
84
84
  end
85
85
  end
86
- end if ::RGeo::Geos.supported?
86
+ end if ::RGeo::Geos.capi_supported?
@@ -40,7 +40,7 @@ require 'rgeo'
40
40
 
41
41
  module RGeo
42
42
  module Tests # :nodoc:
43
- module Geos # :nodoc:
43
+ module GeosCAPI # :nodoc:
44
44
 
45
45
  class TestZMFactory < ::Test::Unit::TestCase # :nodoc:
46
46
 
@@ -82,4 +82,4 @@ module RGeo
82
82
 
83
83
  end
84
84
  end
85
- end if ::RGeo::Geos.supported?
85
+ end if ::RGeo::Geos.capi_supported?
@@ -0,0 +1,91 @@
1
+ # -----------------------------------------------------------------------------
2
+ #
3
+ # Tests for the GEOS factory
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
+ require 'test/unit'
38
+ require 'rgeo'
39
+
40
+
41
+ module RGeo
42
+ module Tests # :nodoc:
43
+ module GeosFFI # :nodoc:
44
+
45
+ class TestFactory < ::Test::Unit::TestCase # :nodoc:
46
+
47
+
48
+ def setup
49
+ @factory = ::RGeo::Geos.factory(:srid => 4326, :native_interface => :ffi)
50
+ end
51
+
52
+
53
+ def test_srid_preserved_through_factory
54
+ geom_ = @factory.point(-10, 20)
55
+ assert_equal(4326, geom_.srid)
56
+ factory_ = geom_.factory
57
+ assert_equal(4326, factory_.srid)
58
+ geom2_ = factory_.point(-20, 25)
59
+ assert_equal(4326, geom2_.srid)
60
+ end
61
+
62
+
63
+ def test_srid_preserved_through_geom_operations
64
+ geom1_ = @factory.point(-10, 20)
65
+ geom2_ = @factory.point(-20, 25)
66
+ geom3_ = geom1_.union(geom2_)
67
+ assert_equal(4326, geom3_.srid)
68
+ assert_equal(4326, geom3_.geometry_n(0).srid)
69
+ assert_equal(4326, geom3_.geometry_n(1).srid)
70
+ end
71
+
72
+
73
+ def test_srid_preserved_through_geom_functions
74
+ geom1_ = @factory.point(-10, 20)
75
+ geom2_ = geom1_.boundary
76
+ assert_equal(4326, geom2_.srid)
77
+ end
78
+
79
+
80
+ def test_srid_preserved_through_dup
81
+ geom1_ = @factory.point(-10, 20)
82
+ geom2_ = geom1_.clone
83
+ assert_equal(4326, geom2_.srid)
84
+ end
85
+
86
+
87
+ end
88
+
89
+ end
90
+ end
91
+ end if ::RGeo::Geos.ffi_supported?