rgeo 0.1.22 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/History.rdoc +31 -0
  2. data/README.rdoc +53 -59
  3. data/Spatial_Programming_With_RGeo.rdoc +120 -67
  4. data/Version +1 -1
  5. data/ext/proj4_c_impl/extconf.rb +1 -1
  6. data/lib/rgeo.rb +80 -87
  7. data/lib/rgeo/cartesian.rb +0 -10
  8. data/lib/rgeo/coord_sys.rb +0 -7
  9. data/lib/rgeo/coord_sys/proj4.rb +2 -2
  10. data/lib/rgeo/error.rb +2 -6
  11. data/lib/rgeo/feature.rb +0 -7
  12. data/lib/rgeo/feature/curve.rb +5 -5
  13. data/lib/rgeo/feature/factory.rb +45 -5
  14. data/lib/rgeo/feature/factory_generator.rb +2 -4
  15. data/lib/rgeo/feature/geometry.rb +97 -27
  16. data/lib/rgeo/feature/geometry_collection.rb +3 -3
  17. data/lib/rgeo/feature/line_string.rb +3 -3
  18. data/lib/rgeo/feature/multi_curve.rb +2 -2
  19. data/lib/rgeo/feature/multi_surface.rb +3 -3
  20. data/lib/rgeo/feature/point.rb +6 -6
  21. data/lib/rgeo/feature/polygon.rb +4 -4
  22. data/lib/rgeo/feature/surface.rb +3 -3
  23. data/lib/rgeo/geographic.rb +0 -11
  24. data/lib/rgeo/geographic/factory.rb +5 -2
  25. data/lib/rgeo/geographic/interface.rb +1 -1
  26. data/lib/rgeo/geos.rb +0 -7
  27. data/lib/rgeo/geos/factory.rb +1 -1
  28. data/lib/rgeo/impl_helper.rb +0 -7
  29. data/lib/rgeo/wkrep.rb +0 -7
  30. data/lib/rgeo/wkrep/wkb_parser.rb +2 -2
  31. data/test/tc_oneoff.rb +0 -1
  32. metadata +7 -155
  33. data/lib/active_record/connection_adapters/mysql2spatial_adapter.rb +0 -124
  34. data/lib/active_record/connection_adapters/mysqlspatial_adapter.rb +0 -136
  35. data/lib/active_record/connection_adapters/postgis_adapter.rb +0 -426
  36. data/lib/active_record/connection_adapters/spatialite_adapter.rb +0 -488
  37. data/lib/rgeo/active_record/arel_modifications.rb +0 -78
  38. data/lib/rgeo/active_record/base_modifications.rb +0 -124
  39. data/lib/rgeo/active_record/common.rb +0 -166
  40. data/lib/rgeo/active_record/mysql_common.rb +0 -150
  41. data/lib/rgeo/all.rb +0 -49
  42. data/lib/rgeo/geo_json.rb +0 -60
  43. data/lib/rgeo/geo_json/coder.rb +0 -401
  44. data/lib/rgeo/geo_json/entities.rb +0 -285
  45. data/lib/rgeo/geo_json/interface.rb +0 -129
  46. data/lib/rgeo/shapefile.rb +0 -60
  47. data/lib/rgeo/shapefile/reader.rb +0 -898
  48. data/test/active_record/common_setup_methods.rb +0 -129
  49. data/test/active_record/readme.txt +0 -43
  50. data/test/active_record/tc_mysqlspatial.rb +0 -170
  51. data/test/active_record/tc_postgis.rb +0 -282
  52. data/test/active_record/tc_spatialite.rb +0 -198
  53. data/test/shapefile/shapelib_testcases/readme.txt +0 -11
  54. data/test/shapefile/shapelib_testcases/test.dbf +0 -0
  55. data/test/shapefile/shapelib_testcases/test.shp +0 -0
  56. data/test/shapefile/shapelib_testcases/test.shx +0 -0
  57. data/test/shapefile/shapelib_testcases/test0.shp +0 -0
  58. data/test/shapefile/shapelib_testcases/test0.shx +0 -0
  59. data/test/shapefile/shapelib_testcases/test1.shp +0 -0
  60. data/test/shapefile/shapelib_testcases/test1.shx +0 -0
  61. data/test/shapefile/shapelib_testcases/test10.shp +0 -0
  62. data/test/shapefile/shapelib_testcases/test10.shx +0 -0
  63. data/test/shapefile/shapelib_testcases/test11.shp +0 -0
  64. data/test/shapefile/shapelib_testcases/test11.shx +0 -0
  65. data/test/shapefile/shapelib_testcases/test12.shp +0 -0
  66. data/test/shapefile/shapelib_testcases/test12.shx +0 -0
  67. data/test/shapefile/shapelib_testcases/test13.shp +0 -0
  68. data/test/shapefile/shapelib_testcases/test13.shx +0 -0
  69. data/test/shapefile/shapelib_testcases/test2.shp +0 -0
  70. data/test/shapefile/shapelib_testcases/test2.shx +0 -0
  71. data/test/shapefile/shapelib_testcases/test3.shp +0 -0
  72. data/test/shapefile/shapelib_testcases/test3.shx +0 -0
  73. data/test/shapefile/shapelib_testcases/test4.shp +0 -0
  74. data/test/shapefile/shapelib_testcases/test4.shx +0 -0
  75. data/test/shapefile/shapelib_testcases/test5.shp +0 -0
  76. data/test/shapefile/shapelib_testcases/test5.shx +0 -0
  77. data/test/shapefile/shapelib_testcases/test6.shp +0 -0
  78. data/test/shapefile/shapelib_testcases/test6.shx +0 -0
  79. data/test/shapefile/shapelib_testcases/test7.shp +0 -0
  80. data/test/shapefile/shapelib_testcases/test7.shx +0 -0
  81. data/test/shapefile/shapelib_testcases/test8.shp +0 -0
  82. data/test/shapefile/shapelib_testcases/test8.shx +0 -0
  83. data/test/shapefile/shapelib_testcases/test9.shp +0 -0
  84. data/test/shapefile/shapelib_testcases/test9.shx +0 -0
  85. data/test/shapefile/tc_shapelib_tests.rb +0 -527
  86. data/test/tc_geojson.rb +0 -279
@@ -1,198 +0,0 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # Tests for the SpatiaLite ActiveRecord adapter
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
- require 'fileutils'
37
- require 'test/unit'
38
- require ::File.expand_path('common_setup_methods.rb', ::File.dirname(__FILE__))
39
-
40
-
41
- module RGeo
42
- module Tests # :nodoc:
43
- module ActiveRecord # :nodoc:
44
-
45
- if TESTS_AVAILABLE
46
-
47
-
48
- if ALL_DATABASES_CONFIG.include?('spatialite')
49
-
50
- class TestSpatiaLite < ::Test::Unit::TestCase # :nodoc:
51
-
52
-
53
- ADAPTER_NAME = 'spatialite'
54
-
55
- def self.before_open_database(params_)
56
- database_ = params_[:config][:database]
57
- dir_ = ::File.dirname(database_)
58
- ::FileUtils.mkdir_p(dir_) unless dir_ == '.'
59
- ::FileUtils.rm_f(database_)
60
- end
61
-
62
- def self.initialize_database(params_)
63
- params_[:connection].execute('SELECT InitSpatialMetaData()')
64
- end
65
-
66
- include CommonSetupMethods
67
-
68
-
69
- def populate_ar_class(content_)
70
- klass_ = create_ar_class
71
- case content_
72
- when :latlon_point
73
- klass_.connection.create_table(:spatial_test) do |t_|
74
- t_.column 'latlon', :point, :srid => 4326
75
- end
76
- end
77
- klass_
78
- end
79
-
80
-
81
- def test_meta_data_present
82
- result_ = DEFAULT_AR_CLASS.connection.select_value("SELECT COUNT(*) FROM spatial_ref_sys").to_i
83
- assert_not_equal(0, result_)
84
- end
85
-
86
-
87
- def test_create_simple_geometry
88
- klass_ = create_ar_class
89
- klass_.connection.create_table(:spatial_test) do |t_|
90
- t_.column 'latlon', :geometry
91
- end
92
- assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
93
- assert_equal(::RGeo::Feature::Geometry, klass_.columns.last.geometric_type)
94
- assert(klass_.cached_attributes.include?('latlon'))
95
- klass_.connection.drop_table(:spatial_test)
96
- assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
97
- end
98
-
99
-
100
- def test_create_point_geometry
101
- klass_ = create_ar_class
102
- klass_.connection.create_table(:spatial_test) do |t_|
103
- t_.column 'latlon', :point
104
- end
105
- assert_equal(::RGeo::Feature::Point, klass_.columns.last.geometric_type)
106
- assert(klass_.cached_attributes.include?('latlon'))
107
- end
108
-
109
-
110
- def test_create_geometry_with_index
111
- klass_ = create_ar_class
112
- klass_.connection.create_table(:spatial_test) do |t_|
113
- t_.column 'latlon', :geometry
114
- end
115
- klass_.connection.change_table(:spatial_test) do |t_|
116
- t_.index([:latlon], :spatial => true)
117
- end
118
- assert(klass_.connection.spatial_indexes(:spatial_test).last.spatial)
119
- end
120
-
121
-
122
- def test_set_and_get_point
123
- klass_ = populate_ar_class(:latlon_point)
124
- obj_ = klass_.new
125
- assert_nil(obj_.latlon)
126
- obj_.latlon = @factory.point(1, 2)
127
- assert_equal(@factory.point(1, 2), obj_.latlon)
128
- assert_equal(4326, obj_.latlon.srid)
129
- end
130
-
131
-
132
- def test_set_and_get_point_from_wkt
133
- klass_ = populate_ar_class(:latlon_point)
134
- obj_ = klass_.new
135
- assert_nil(obj_.latlon)
136
- obj_.latlon = 'POINT(1 2)'
137
- assert_equal(@factory.point(1, 2), obj_.latlon)
138
- assert_equal(4326, obj_.latlon.srid)
139
- end
140
-
141
-
142
- def test_save_and_load_point
143
- klass_ = populate_ar_class(:latlon_point)
144
- obj_ = klass_.new
145
- obj_.latlon = @factory.point(1, 2)
146
- obj_.save!
147
- id_ = obj_.id
148
- obj2_ = klass_.find(id_)
149
- assert_equal(@factory.point(1, 2), obj2_.latlon)
150
- assert_equal(4326, obj2_.latlon.srid)
151
- end
152
-
153
-
154
- def test_save_and_load_point_from_wkt
155
- klass_ = populate_ar_class(:latlon_point)
156
- obj_ = klass_.new
157
- obj_.latlon = 'POINT(1 2)'
158
- obj_.save!
159
- id_ = obj_.id
160
- obj2_ = klass_.find(id_)
161
- assert_equal(@factory.point(1, 2), obj2_.latlon)
162
- assert_equal(4326, obj2_.latlon.srid)
163
- end
164
-
165
-
166
- def test_add_column
167
- klass_ = create_ar_class
168
- klass_.connection.create_table(:spatial_test) do |t_|
169
- t_.column('latlon', :geometry)
170
- end
171
- klass_.connection.change_table(:spatial_test) do |t_|
172
- t_.column('geom2', :point, :srid => 4326)
173
- t_.column('name', :string)
174
- end
175
- assert_equal(2, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
176
- cols_ = klass_.columns
177
- assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
178
- assert_equal(-1, cols_[-3].srid)
179
- assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
180
- assert_equal(4326, cols_[-2].srid)
181
- assert_nil(cols_[-1].geometric_type)
182
- end
183
-
184
-
185
- end
186
-
187
- else
188
- puts "WARNING: Couldn't find spatialite in database.yml. Skipping those tests."
189
- puts " See tests/active_record/readme.txt for more info."
190
- end
191
-
192
-
193
- end
194
-
195
- end
196
-
197
- end
198
- end
@@ -1,11 +0,0 @@
1
- The shapefiles in this directory are a test suite used by shapelib.
2
- They don't cover every case, but seemed a good starting point.
3
- Shapelib can be found at http://shapelib.maptools.org/
4
-
5
- The numbered test files are generated by the shptest tool. The
6
- non-numbered case (including a dbf file) is generated by the
7
- makeshape.sh script. Both were run from shapelib release 1.3.0b2.
8
-
9
- Since we're embedding the test cases themselves here in this
10
- directory, we note that they are Copyright 1999 Frank Warmerdam,
11
- and are distrubted under an MIT style license.
@@ -1,527 +0,0 @@
1
- # -----------------------------------------------------------------------------
2
- #
3
- # A container file for one-off tests
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 Shapefile
44
-
45
- class TestShapelibTests < ::Test::Unit::TestCase # :nodoc:
46
-
47
- def _open_shapefile(name_, &block_)
48
- RGeo::Shapefile::Reader.open(::File.expand_path("shapelib_testcases/#{name_}", ::File.dirname(__FILE__)), :factory_generator => ::RGeo::Cartesian.method(:simple_factory), &block_)
49
- end
50
-
51
-
52
- def test_rewind
53
- _open_shapefile('test') do |file_|
54
- assert_equal(0, file_.cur_index)
55
- rec_ = file_.next
56
- assert_equal(0, rec_.index)
57
- assert_equal(1, rec_.geometry[0].num_interior_rings)
58
- assert_equal(1, file_.cur_index)
59
- file_.rewind
60
- assert_equal(0, file_.cur_index)
61
- rec_ = file_.next
62
- assert_equal(0, rec_.index)
63
- assert_equal(1, rec_.geometry[0].num_interior_rings)
64
- end
65
- end
66
-
67
-
68
- def test_seek
69
- _open_shapefile('test') do |file_|
70
- assert_equal(0, file_.cur_index)
71
- assert_equal(false, file_.seek_index(4))
72
- assert_equal(0, file_.cur_index)
73
- file_.seek_index(3)
74
- assert_equal(3, file_.cur_index)
75
- assert_nil(file_.next)
76
- file_.seek_index(2)
77
- assert_equal(2, file_.cur_index)
78
- rec_ = file_.next
79
- assert_equal(2, rec_.index)
80
- assert_equal(0, rec_.geometry[0].num_interior_rings)
81
- assert_equal('', rec_['Descriptio'])
82
- file_.seek_index(0)
83
- assert_equal(0, file_.cur_index)
84
- rec_ = file_.next
85
- assert_equal(0, rec_.index)
86
- assert_equal(1, rec_.geometry[0].num_interior_rings)
87
- end
88
- end
89
-
90
-
91
- def test_attributes
92
- _open_shapefile('test') do |file_|
93
- rec_ = file_.next
94
- assert_equal('Square with triangle missing', rec_['Descriptio'])
95
- assert_equal(1, rec_['TestInt'])
96
- assert_equal(2.5, rec_['TestDouble'])
97
- assert_nil(rec_['NotAKey'])
98
- rec_ = file_.next
99
- assert_equal('Smaller triangle', rec_['Descriptio'])
100
- assert_equal(100, rec_['TestInt'])
101
- assert_equal(1000.25, rec_['TestDouble'])
102
- rec_ = file_.next
103
- assert_equal('', rec_['Descriptio'])
104
- assert_equal(0, rec_['TestInt'])
105
- assert_equal(0, rec_['TestDouble'])
106
- end
107
- end
108
-
109
-
110
- def test_test0
111
- _open_shapefile('test0') do |file_|
112
- assert_equal(0, file_.shape_type_code)
113
- assert_equal(2, file_.num_records)
114
- rec_ = file_.next
115
- assert_equal(0, rec_.index)
116
- assert_nil(rec_.geometry)
117
- rec_ = file_.next
118
- assert_equal(1, rec_.index)
119
- assert_nil(rec_.geometry)
120
- assert_nil(file_.next)
121
- end
122
- end
123
-
124
-
125
- def _test_point_shapefile(filename_, has_z_, has_m_)
126
- _open_shapefile(filename_) do |file_|
127
- assert_equal(has_z_ ? 11 : has_m_ ? 21 : 1, file_.shape_type_code)
128
- assert_equal(2, file_.num_records)
129
- assert_equal(has_z_, file_.factory.property(:has_z_coordinate))
130
- assert_equal(has_m_, file_.factory.property(:has_m_coordinate))
131
- rec_ = file_.next
132
- assert_equal(0, rec_.index)
133
- assert_equal(::RGeo::Feature::Point, rec_.geometry.geometry_type)
134
- assert_equal(1, rec_.geometry.x)
135
- assert_equal(2, rec_.geometry.y)
136
- assert_equal(3, rec_.geometry.z) if has_z_
137
- assert_equal(4, rec_.geometry.m) if has_m_
138
- rec_ = file_.next
139
- assert_equal(1, rec_.index)
140
- assert_equal(::RGeo::Feature::Point, rec_.geometry.geometry_type)
141
- assert_equal(10, rec_.geometry.x)
142
- assert_equal(20, rec_.geometry.y)
143
- assert_equal(30, rec_.geometry.z) if has_z_
144
- assert_equal(40, rec_.geometry.m) if has_m_
145
- assert_nil(file_.next)
146
- end
147
- end
148
-
149
-
150
- def test_test1
151
- _test_point_shapefile('test1', false, false)
152
- end
153
-
154
-
155
- def test_test2
156
- _test_point_shapefile('test2', true, true)
157
- end
158
-
159
-
160
- def test_test3
161
- _test_point_shapefile('test3', false, true)
162
- end
163
-
164
-
165
- def _test_multipoint_shapefile(filename_, has_z_, has_m_)
166
- _open_shapefile(filename_) do |file_|
167
- assert_equal(has_z_ ? 18 : has_m_ ? 28 : 8, file_.shape_type_code)
168
- assert_equal(3, file_.num_records)
169
- assert_equal(has_z_, file_.factory.property(:has_z_coordinate))
170
- assert_equal(has_m_, file_.factory.property(:has_m_coordinate))
171
- rec_ = file_.next
172
- assert_equal(::RGeo::Feature::MultiPoint, rec_.geometry.geometry_type)
173
- assert_equal(4, rec_.geometry.num_geometries)
174
- assert_equal(1.15, rec_.geometry[0].x)
175
- assert_equal(2.25, rec_.geometry[0].y)
176
- assert_equal(3.35, rec_.geometry[0].z) if has_z_
177
- assert_equal(4.45, rec_.geometry[0].m) if has_m_
178
- assert_equal(4.15, rec_.geometry[3].x)
179
- assert_equal(5.25, rec_.geometry[3].y)
180
- assert_equal(6.35, rec_.geometry[3].z) if has_z_
181
- assert_equal(7.45, rec_.geometry[3].m) if has_m_
182
- rec_ = file_.next
183
- assert_equal(::RGeo::Feature::MultiPoint, rec_.geometry.geometry_type)
184
- assert_equal(4, rec_.geometry.num_geometries)
185
- rec_ = file_.next
186
- assert_equal(::RGeo::Feature::MultiPoint, rec_.geometry.geometry_type)
187
- assert_equal(4, rec_.geometry.num_geometries)
188
- assert_equal(21.15, rec_.geometry[0].x)
189
- assert_equal(22.25, rec_.geometry[0].y)
190
- assert_equal(23.35, rec_.geometry[0].z) if has_z_
191
- assert_equal(24.45, rec_.geometry[0].m) if has_m_
192
- assert_equal(24.15, rec_.geometry[3].x)
193
- assert_equal(25.25, rec_.geometry[3].y)
194
- assert_equal(26.35, rec_.geometry[3].z) if has_z_
195
- assert_equal(27.45, rec_.geometry[3].m) if has_m_
196
- assert_nil(file_.next)
197
- end
198
- end
199
-
200
-
201
- def test_test4
202
- _test_multipoint_shapefile('test4', false, false)
203
- end
204
-
205
-
206
- def test_test5
207
- _test_multipoint_shapefile('test5', true, true)
208
- end
209
-
210
-
211
- def test_test6
212
- _test_multipoint_shapefile('test6', false, true)
213
- end
214
-
215
-
216
- def _test_polyline_shapefile(filename_, has_z_, has_m_)
217
- _open_shapefile(filename_) do |file_|
218
- assert_equal(has_z_ ? 13 : has_m_ ? 23 : 3, file_.shape_type_code)
219
- assert_equal(4, file_.num_records)
220
- assert_equal(has_z_, file_.factory.property(:has_z_coordinate))
221
- assert_equal(has_m_, file_.factory.property(:has_m_coordinate))
222
- rec_ = file_.next
223
- assert_equal(::RGeo::Feature::MultiLineString, rec_.geometry.geometry_type)
224
- assert_equal(1, rec_.geometry.num_geometries)
225
- assert_equal(5, rec_.geometry[0].num_points)
226
- assert_equal(1, rec_.geometry[0].point_n(0).x)
227
- assert_equal(1, rec_.geometry[0].point_n(0).y)
228
- assert_equal(3.35, rec_.geometry[0].point_n(0).z) if has_z_
229
- assert_equal(4.45, rec_.geometry[0].point_n(0).m) if has_m_
230
- assert_equal(2, rec_.geometry[0].point_n(1).x)
231
- assert_equal(1, rec_.geometry[0].point_n(1).y)
232
- assert_equal(4.35, rec_.geometry[0].point_n(1).z) if has_z_
233
- assert_equal(5.45, rec_.geometry[0].point_n(1).m) if has_m_
234
- assert_equal(2, rec_.geometry[0].point_n(2).x)
235
- assert_equal(2, rec_.geometry[0].point_n(2).y)
236
- assert_equal(5.35, rec_.geometry[0].point_n(2).z) if has_z_
237
- assert_equal(6.45, rec_.geometry[0].point_n(2).m) if has_m_
238
- assert_equal(1, rec_.geometry[0].point_n(4).x)
239
- assert_equal(1, rec_.geometry[0].point_n(4).y)
240
- assert_equal(7.35, rec_.geometry[0].point_n(4).z) if has_z_
241
- assert_equal(8.45, rec_.geometry[0].point_n(4).m) if has_m_
242
- rec_ = file_.next
243
- assert_equal(::RGeo::Feature::MultiLineString, rec_.geometry.geometry_type)
244
- assert_equal(1, rec_.geometry.num_geometries)
245
- rec_ = file_.next
246
- assert_equal(::RGeo::Feature::MultiLineString, rec_.geometry.geometry_type)
247
- assert_equal(1, rec_.geometry.num_geometries)
248
- assert_equal(5, rec_.geometry[0].num_points)
249
- assert_equal(1, rec_.geometry[0].point_n(0).x)
250
- assert_equal(7, rec_.geometry[0].point_n(0).y)
251
- assert_equal(23.35, rec_.geometry[0].point_n(0).z) if has_z_
252
- assert_equal(24.45, rec_.geometry[0].point_n(0).m) if has_m_
253
- assert_equal(2, rec_.geometry[0].point_n(1).x)
254
- assert_equal(7, rec_.geometry[0].point_n(1).y)
255
- assert_equal(24.35, rec_.geometry[0].point_n(1).z) if has_z_
256
- assert_equal(25.45, rec_.geometry[0].point_n(1).m) if has_m_
257
- assert_equal(2, rec_.geometry[0].point_n(2).x)
258
- assert_equal(8, rec_.geometry[0].point_n(2).y)
259
- assert_equal(25.35, rec_.geometry[0].point_n(2).z) if has_z_
260
- assert_equal(26.45, rec_.geometry[0].point_n(2).m) if has_m_
261
- assert_equal(1, rec_.geometry[0].point_n(4).x)
262
- assert_equal(7, rec_.geometry[0].point_n(4).y)
263
- assert_equal(27.35, rec_.geometry[0].point_n(4).z) if has_z_
264
- assert_equal(28.45, rec_.geometry[0].point_n(4).m) if has_m_
265
- rec_ = file_.next
266
- assert_equal(::RGeo::Feature::MultiLineString, rec_.geometry.geometry_type)
267
- assert_equal(3, rec_.geometry.num_geometries)
268
- assert_equal(5, rec_.geometry[0].num_points)
269
- assert_equal(0, rec_.geometry[0].point_n(0).x)
270
- assert_equal(0, rec_.geometry[0].point_n(0).y)
271
- assert_equal(0, rec_.geometry[0].point_n(0).z) if has_z_
272
- assert_equal(0, rec_.geometry[0].point_n(0).m) if has_m_
273
- assert_equal(0, rec_.geometry[0].point_n(1).x)
274
- assert_equal(100, rec_.geometry[0].point_n(1).y)
275
- assert_equal(1, rec_.geometry[0].point_n(1).z) if has_z_
276
- assert_equal(2, rec_.geometry[0].point_n(1).m) if has_m_
277
- assert_equal(0, rec_.geometry[0].point_n(4).x)
278
- assert_equal(0, rec_.geometry[0].point_n(4).y)
279
- assert_equal(4, rec_.geometry[0].point_n(4).z) if has_z_
280
- assert_equal(8, rec_.geometry[0].point_n(4).m) if has_m_
281
- assert_equal(5, rec_.geometry[1].num_points)
282
- assert_equal(10, rec_.geometry[1].point_n(0).x)
283
- assert_equal(20, rec_.geometry[1].point_n(0).y)
284
- assert_equal(5, rec_.geometry[1].point_n(0).z) if has_z_
285
- assert_equal(10, rec_.geometry[1].point_n(0).m) if has_m_
286
- assert_equal(30, rec_.geometry[1].point_n(1).x)
287
- assert_equal(20, rec_.geometry[1].point_n(1).y)
288
- assert_equal(6, rec_.geometry[1].point_n(1).z) if has_z_
289
- assert_equal(12, rec_.geometry[1].point_n(1).m) if has_m_
290
- assert_equal(30, rec_.geometry[1].point_n(2).x)
291
- assert_equal(40, rec_.geometry[1].point_n(2).y)
292
- assert_equal(7, rec_.geometry[1].point_n(2).z) if has_z_
293
- assert_equal(14, rec_.geometry[1].point_n(2).m) if has_m_
294
- assert_equal(5, rec_.geometry[2].num_points)
295
- assert_equal(60, rec_.geometry[2].point_n(0).x)
296
- assert_equal(20, rec_.geometry[2].point_n(0).y)
297
- assert_equal(10, rec_.geometry[2].point_n(0).z) if has_z_
298
- assert_equal(20, rec_.geometry[2].point_n(0).m) if has_m_
299
- assert_equal(90, rec_.geometry[2].point_n(1).x)
300
- assert_equal(20, rec_.geometry[2].point_n(1).y)
301
- assert_equal(11, rec_.geometry[2].point_n(1).z) if has_z_
302
- assert_equal(22, rec_.geometry[2].point_n(1).m) if has_m_
303
- assert_equal(60, rec_.geometry[2].point_n(4).x)
304
- assert_equal(20, rec_.geometry[2].point_n(4).y)
305
- assert_equal(14, rec_.geometry[2].point_n(4).z) if has_z_
306
- assert_equal(28, rec_.geometry[2].point_n(4).m) if has_m_
307
- end
308
- end
309
-
310
-
311
- def test_test7
312
- _test_polyline_shapefile('test7', false, false)
313
- end
314
-
315
-
316
- def test_test8
317
- _test_polyline_shapefile('test8', true, true)
318
- end
319
-
320
-
321
- def test_test9
322
- _test_polyline_shapefile('test9', false, true)
323
- end
324
-
325
-
326
- def _test_polygon_shapefile(filename_, has_z_, has_m_)
327
- _open_shapefile(filename_) do |file_|
328
- assert_equal(has_z_ ? 15 : has_m_ ? 25 : 5, file_.shape_type_code)
329
- assert_equal(4, file_.num_records)
330
- assert_equal(has_z_, file_.factory.property(:has_z_coordinate))
331
- assert_equal(has_m_, file_.factory.property(:has_m_coordinate))
332
- rec_ = file_.next
333
- assert_equal(::RGeo::Feature::MultiPolygon, rec_.geometry.geometry_type)
334
- assert_equal(1, rec_.geometry.num_geometries)
335
- assert_equal(0, rec_.geometry[0].num_interior_rings)
336
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
337
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).x)
338
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).y)
339
- assert_equal(3.35, rec_.geometry[0].exterior_ring.point_n(0).z) if has_z_
340
- assert_equal(4.45, rec_.geometry[0].exterior_ring.point_n(0).m) if has_m_
341
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(1).x)
342
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(1).y)
343
- assert_equal(4.35, rec_.geometry[0].exterior_ring.point_n(1).z) if has_z_
344
- assert_equal(5.45, rec_.geometry[0].exterior_ring.point_n(1).m) if has_m_
345
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).x)
346
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).y)
347
- assert_equal(5.35, rec_.geometry[0].exterior_ring.point_n(2).z) if has_z_
348
- assert_equal(6.45, rec_.geometry[0].exterior_ring.point_n(2).m) if has_m_
349
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).x)
350
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).y)
351
- assert_equal(7.35, rec_.geometry[0].exterior_ring.point_n(4).z) if has_z_
352
- assert_equal(8.45, rec_.geometry[0].exterior_ring.point_n(4).m) if has_m_
353
- rec_ = file_.next
354
- assert_equal(::RGeo::Feature::MultiPolygon, rec_.geometry.geometry_type)
355
- assert_equal(1, rec_.geometry.num_geometries)
356
- rec_ = file_.next
357
- assert_equal(::RGeo::Feature::MultiPolygon, rec_.geometry.geometry_type)
358
- assert_equal(1, rec_.geometry.num_geometries)
359
- assert_equal(0, rec_.geometry[0].num_interior_rings)
360
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
361
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).x)
362
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(0).y)
363
- assert_equal(23.35, rec_.geometry[0].exterior_ring.point_n(0).z) if has_z_
364
- assert_equal(24.45, rec_.geometry[0].exterior_ring.point_n(0).m) if has_m_
365
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(1).x)
366
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(1).y)
367
- assert_equal(24.35, rec_.geometry[0].exterior_ring.point_n(1).z) if has_z_
368
- assert_equal(25.45, rec_.geometry[0].exterior_ring.point_n(1).m) if has_m_
369
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).x)
370
- assert_equal(8, rec_.geometry[0].exterior_ring.point_n(2).y)
371
- assert_equal(25.35, rec_.geometry[0].exterior_ring.point_n(2).z) if has_z_
372
- assert_equal(26.45, rec_.geometry[0].exterior_ring.point_n(2).m) if has_m_
373
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).x)
374
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(4).y)
375
- assert_equal(27.35, rec_.geometry[0].exterior_ring.point_n(4).z) if has_z_
376
- assert_equal(28.45, rec_.geometry[0].exterior_ring.point_n(4).m) if has_m_
377
- rec_ = file_.next
378
- assert_equal(::RGeo::Feature::MultiPolygon, rec_.geometry.geometry_type)
379
- assert_equal(1, rec_.geometry.num_geometries)
380
- assert_equal(2, rec_.geometry[0].num_interior_rings)
381
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
382
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).x)
383
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).y)
384
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).z) if has_z_
385
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).m) if has_m_
386
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(1).x)
387
- assert_equal(100, rec_.geometry[0].exterior_ring.point_n(1).y)
388
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(1).z) if has_z_
389
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(1).m) if has_m_
390
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(4).x)
391
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(4).y)
392
- assert_equal(4, rec_.geometry[0].exterior_ring.point_n(4).z) if has_z_
393
- assert_equal(8, rec_.geometry[0].exterior_ring.point_n(4).m) if has_m_
394
- assert_equal(5, rec_.geometry[0].interior_ring_n(0).num_points)
395
- assert_equal(10, rec_.geometry[0].interior_ring_n(0).point_n(0).x)
396
- assert_equal(20, rec_.geometry[0].interior_ring_n(0).point_n(0).y)
397
- assert_equal(5, rec_.geometry[0].interior_ring_n(0).point_n(0).z) if has_z_
398
- assert_equal(10, rec_.geometry[0].interior_ring_n(0).point_n(0).m) if has_m_
399
- assert_equal(30, rec_.geometry[0].interior_ring_n(0).point_n(1).x)
400
- assert_equal(20, rec_.geometry[0].interior_ring_n(0).point_n(1).y)
401
- assert_equal(6, rec_.geometry[0].interior_ring_n(0).point_n(1).z) if has_z_
402
- assert_equal(12, rec_.geometry[0].interior_ring_n(0).point_n(1).m) if has_m_
403
- assert_equal(30, rec_.geometry[0].interior_ring_n(0).point_n(2).x)
404
- assert_equal(40, rec_.geometry[0].interior_ring_n(0).point_n(2).y)
405
- assert_equal(7, rec_.geometry[0].interior_ring_n(0).point_n(2).z) if has_z_
406
- assert_equal(14, rec_.geometry[0].interior_ring_n(0).point_n(2).m) if has_m_
407
- assert_equal(5, rec_.geometry[0].interior_ring_n(1).num_points)
408
- assert_equal(60, rec_.geometry[0].interior_ring_n(1).point_n(0).x)
409
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(0).y)
410
- assert_equal(10, rec_.geometry[0].interior_ring_n(1).point_n(0).z) if has_z_
411
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(0).m) if has_m_
412
- assert_equal(90, rec_.geometry[0].interior_ring_n(1).point_n(1).x)
413
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(1).y)
414
- assert_equal(11, rec_.geometry[0].interior_ring_n(1).point_n(1).z) if has_z_
415
- assert_equal(22, rec_.geometry[0].interior_ring_n(1).point_n(1).m) if has_m_
416
- assert_equal(60, rec_.geometry[0].interior_ring_n(1).point_n(4).x)
417
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(4).y)
418
- assert_equal(14, rec_.geometry[0].interior_ring_n(1).point_n(4).z) if has_z_
419
- assert_equal(28, rec_.geometry[0].interior_ring_n(1).point_n(4).m) if has_m_
420
- end
421
- end
422
-
423
-
424
- def test_test10
425
- _test_polygon_shapefile('test10', false, false)
426
- end
427
-
428
-
429
- def test_test11
430
- _test_polygon_shapefile('test11', true, true)
431
- end
432
-
433
-
434
- def test_test12
435
- _test_polygon_shapefile('test12', false, true)
436
- end
437
-
438
-
439
- def test_test13
440
- _open_shapefile('test13') do |file_|
441
- assert_equal(31, file_.shape_type_code)
442
- assert_equal(4, file_.num_records)
443
- assert_equal(true, file_.factory.property(:has_z_coordinate))
444
- # I believe shapefile's test13 incorrectly includes bounding
445
- # box data for m, since there is no actual m data. So I
446
- # disabled this test:
447
- # assert_equal(false, file_.factory.property(:has_m_coordinate))
448
- rec_ = file_.next
449
- assert_equal(::RGeo::Feature::GeometryCollection, rec_.geometry.geometry_type)
450
- assert_equal(1, rec_.geometry.num_geometries)
451
- assert_equal(0, rec_.geometry[0].num_interior_rings)
452
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
453
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).x)
454
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).y)
455
- assert_equal(3.35, rec_.geometry[0].exterior_ring.point_n(0).z)
456
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(1).x)
457
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(1).y)
458
- assert_equal(4.35, rec_.geometry[0].exterior_ring.point_n(1).z)
459
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).x)
460
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).y)
461
- assert_equal(5.35, rec_.geometry[0].exterior_ring.point_n(2).z)
462
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).x)
463
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).y)
464
- assert_equal(7.35, rec_.geometry[0].exterior_ring.point_n(4).z)
465
- rec_ = file_.next
466
- assert_equal(::RGeo::Feature::GeometryCollection, rec_.geometry.geometry_type)
467
- assert_equal(1, rec_.geometry.num_geometries)
468
- rec_ = file_.next
469
- assert_equal(::RGeo::Feature::GeometryCollection, rec_.geometry.geometry_type)
470
- assert_equal(1, rec_.geometry.num_geometries)
471
- assert_equal(0, rec_.geometry[0].num_interior_rings)
472
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
473
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(0).x)
474
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(0).y)
475
- assert_equal(23.35, rec_.geometry[0].exterior_ring.point_n(0).z)
476
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(1).x)
477
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(1).y)
478
- assert_equal(24.35, rec_.geometry[0].exterior_ring.point_n(1).z)
479
- assert_equal(2, rec_.geometry[0].exterior_ring.point_n(2).x)
480
- assert_equal(8, rec_.geometry[0].exterior_ring.point_n(2).y)
481
- assert_equal(25.35, rec_.geometry[0].exterior_ring.point_n(2).z)
482
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(4).x)
483
- assert_equal(7, rec_.geometry[0].exterior_ring.point_n(4).y)
484
- assert_equal(27.35, rec_.geometry[0].exterior_ring.point_n(4).z)
485
- rec_ = file_.next
486
- assert_equal(::RGeo::Feature::GeometryCollection, rec_.geometry.geometry_type)
487
- assert_equal(1, rec_.geometry.num_geometries)
488
- assert_equal(2, rec_.geometry[0].num_interior_rings)
489
- assert_equal(5, rec_.geometry[0].exterior_ring.num_points)
490
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).x)
491
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).y)
492
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(0).z)
493
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(1).x)
494
- assert_equal(100, rec_.geometry[0].exterior_ring.point_n(1).y)
495
- assert_equal(1, rec_.geometry[0].exterior_ring.point_n(1).z)
496
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(4).x)
497
- assert_equal(0, rec_.geometry[0].exterior_ring.point_n(4).y)
498
- assert_equal(4, rec_.geometry[0].exterior_ring.point_n(4).z)
499
- assert_equal(5, rec_.geometry[0].interior_ring_n(0).num_points)
500
- assert_equal(10, rec_.geometry[0].interior_ring_n(0).point_n(0).x)
501
- assert_equal(20, rec_.geometry[0].interior_ring_n(0).point_n(0).y)
502
- assert_equal(5, rec_.geometry[0].interior_ring_n(0).point_n(0).z)
503
- assert_equal(30, rec_.geometry[0].interior_ring_n(0).point_n(1).x)
504
- assert_equal(20, rec_.geometry[0].interior_ring_n(0).point_n(1).y)
505
- assert_equal(6, rec_.geometry[0].interior_ring_n(0).point_n(1).z)
506
- assert_equal(30, rec_.geometry[0].interior_ring_n(0).point_n(2).x)
507
- assert_equal(40, rec_.geometry[0].interior_ring_n(0).point_n(2).y)
508
- assert_equal(7, rec_.geometry[0].interior_ring_n(0).point_n(2).z)
509
- assert_equal(5, rec_.geometry[0].interior_ring_n(1).num_points)
510
- assert_equal(60, rec_.geometry[0].interior_ring_n(1).point_n(0).x)
511
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(0).y)
512
- assert_equal(10, rec_.geometry[0].interior_ring_n(1).point_n(0).z)
513
- assert_equal(90, rec_.geometry[0].interior_ring_n(1).point_n(1).x)
514
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(1).y)
515
- assert_equal(11, rec_.geometry[0].interior_ring_n(1).point_n(1).z)
516
- assert_equal(60, rec_.geometry[0].interior_ring_n(1).point_n(4).x)
517
- assert_equal(20, rec_.geometry[0].interior_ring_n(1).point_n(4).y)
518
- assert_equal(14, rec_.geometry[0].interior_ring_n(1).point_n(4).z)
519
- end
520
- end
521
-
522
-
523
- end
524
-
525
- end
526
- end
527
- end