geos-extensions 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +17 -0
  4. data/Guardfile +17 -0
  5. data/MIT-LICENSE +1 -1
  6. data/README.rdoc +19 -91
  7. data/Rakefile +1 -12
  8. data/geos-extensions.gemspec +1 -9
  9. data/lib/geos-extensions.rb +1 -9
  10. data/lib/geos/coordinate_sequence.rb +92 -0
  11. data/lib/geos/extensions/version.rb +1 -1
  12. data/lib/geos/geometry.rb +252 -0
  13. data/lib/geos/geometry_collection.rb +60 -0
  14. data/lib/geos/geos_helper.rb +86 -72
  15. data/lib/geos/google_maps.rb +1 -0
  16. data/lib/geos/google_maps/api_2.rb +9 -23
  17. data/lib/geos/google_maps/api_3.rb +10 -24
  18. data/lib/geos/google_maps/api_common.rb +41 -0
  19. data/lib/geos/line_string.rb +15 -0
  20. data/lib/geos/multi_line_string.rb +15 -0
  21. data/lib/geos/multi_point.rb +15 -0
  22. data/lib/geos/multi_polygon.rb +27 -0
  23. data/lib/geos/point.rb +120 -0
  24. data/lib/geos/polygon.rb +158 -0
  25. data/lib/geos/yaml.rb +30 -0
  26. data/lib/geos/yaml/psych.rb +18 -0
  27. data/lib/geos/yaml/syck.rb +41 -0
  28. data/lib/geos_extensions.rb +110 -711
  29. data/test/google_maps_api_2_tests.rb +54 -32
  30. data/test/google_maps_api_3_tests.rb +58 -36
  31. data/test/google_maps_polyline_encoder_tests.rb +1 -1
  32. data/test/helper_tests.rb +28 -0
  33. data/test/misc_tests.rb +130 -10
  34. data/test/reader_tests.rb +38 -1
  35. data/test/test_helper.rb +54 -146
  36. data/test/writer_tests.rb +329 -10
  37. data/test/yaml_tests.rb +203 -0
  38. metadata +26 -102
  39. data/app/models/geos/geometry_column.rb +0 -39
  40. data/app/models/geos/spatial_ref_sys.rb +0 -12
  41. data/lib/geos/active_record_extensions.rb +0 -12
  42. data/lib/geos/active_record_extensions/connection_adapters/postgresql_adapter.rb +0 -151
  43. data/lib/geos/active_record_extensions/spatial_columns.rb +0 -367
  44. data/lib/geos/active_record_extensions/spatial_scopes.rb +0 -493
  45. data/lib/geos/rails/engine.rb +0 -6
  46. data/lib/tasks/test.rake +0 -42
  47. data/test/adapter_tests.rb +0 -38
  48. data/test/database.yml +0 -17
  49. data/test/fixtures/foo3ds.yml +0 -16
  50. data/test/fixtures/foo_geographies.yml +0 -16
  51. data/test/fixtures/foos.yml +0 -16
  52. data/test/geography_columns_tests.rb +0 -176
  53. data/test/geometry_columns_tests.rb +0 -178
  54. data/test/spatial_scopes_geographies_tests.rb +0 -107
  55. data/test/spatial_scopes_tests.rb +0 -337
@@ -1,107 +0,0 @@
1
-
2
- $: << File.dirname(__FILE__)
3
- require 'test_helper'
4
-
5
- if ENV['TEST_ACTIVERECORD']
6
- class SpatialScopesGeographiesTests < ActiveRecord::TestCase
7
- include TestHelper
8
- include ActiveRecord::TestFixtures
9
-
10
- self.fixture_path = File.join(File.dirname(__FILE__), 'fixtures')
11
- fixtures :foo_geographies
12
-
13
- def ids_tester(method, args, ids = [], options = {})
14
- geoms = FooGeography.send(method, *Array(args)).all(options)
15
- assert_equal(ids.sort, geoms.collect(&:id).sort)
16
- end
17
-
18
- def test_covers
19
- ids_tester(:st_covers, 'POINT(0 0)', [ 3 ], :conditions => {
20
- :id => [ 3 ]
21
- })
22
- end
23
-
24
- def test_coveredby
25
- ids_tester(:st_coveredby, 'POLYGON((-6 -6, -6 6, 6 6, 6 -6, -6 -6))', [ 1 ], :conditions => {
26
- :id => [ 1, 2 ]
27
- })
28
- end
29
-
30
- def test_intersects
31
- ids_tester(:st_intersects, 'LINESTRING(-5 -5, 10 10)', [ 2, 3 ])
32
- end
33
-
34
- def test_dwithin
35
- ids_tester(:st_dwithin, [ 'POINT(5 5)', 10 ], [ 3 ])
36
- end
37
-
38
- def test_allow_null
39
- begin
40
- foo = FooGeography.create(:name => 'four')
41
- ids_tester(:st_covers, [ 'POINT(3 3)', { :allow_null => true } ], [ 3, foo.id ])
42
- ensure
43
- FooGeography.find_by_name('four').destroy
44
- end
45
- end
46
-
47
- def test_with_column
48
- assert_equal([3], FooGeography.st_covers('POINT(7 7)', :column => :the_other_geom).all.collect(&:id).sort)
49
- end
50
-
51
- def test_with_srid_switching
52
- assert_equal([3], FooGeography.st_covers('SRID=4326; POINT(3 3)').all.collect(&:id).sort)
53
- end
54
-
55
- def test_with_srid_default
56
- assert_equal([3], FooGeography.st_covers('SRID=default; POINT(3 3)').all.collect(&:id).sort)
57
- end
58
-
59
- def test_with_srid_transform
60
- assert_equal([3], FooGeography.st_covers('SRID=4269; POINT(7 7)', :column => :the_other_geom).all.collect(&:id).sort)
61
- end
62
-
63
- def test_order_by_distance
64
- assert_equal([3, 1, 2], FooGeography.order_by_distance('POINT(1 1)').all.collect(&:id))
65
- end
66
-
67
- def test_order_by_distance_desc
68
- assert_equal([2, 1, 3], FooGeography.order_by_distance('POINT(1 1)', :desc => true).all.collect(&:id))
69
- end
70
-
71
- def test_order_by_area
72
- assert_equal([1, 2, 3], FooGeography.order_by_area.order('id').all.collect(&:id))
73
- end
74
-
75
- def test_order_by_area_desc
76
- assert_equal([3, 1, 2], FooGeography.order_by_area(:desc => true).order('id').all.collect(&:id))
77
- end
78
-
79
- def test_order_by_length
80
- assert_equal([1, 2, 3], FooGeography.order_by_length.order('id').all.collect(&:id))
81
- end
82
-
83
- def test_order_by_length_desc
84
- expected = if Geos::ActiveRecord.POSTGIS[:lib] >= '2.0'
85
- [1, 2, 3]
86
- else
87
- [3, 1, 2]
88
- end
89
-
90
- assert_equal(expected, FooGeography.order_by_length(:desc => true).order('id').where('true = true').all.collect(&:id))
91
- end
92
-
93
- if Geos::ActiveRecord.POSTGIS[:lib] >= '2.0'
94
- def test_order_by_perimeter
95
- assert_equal([1, 2, 3], FooGeography.order_by_perimeter.order('id').all.collect(&:id))
96
- end
97
-
98
- def test_order_by_perimeter_desc
99
- assert_equal([3, 1, 2], FooGeography.order_by_perimeter(:desc => true).order('id').all.collect(&:id))
100
- end
101
- end
102
-
103
- def test_order_by_area_with_desc_symbol
104
- assert_equal([3, 1, 2], FooGeography.order_by_area(:desc).order('id').all.collect(&:id))
105
- end
106
- end
107
- end
@@ -1,337 +0,0 @@
1
-
2
- $: << File.dirname(__FILE__)
3
- require 'test_helper'
4
-
5
- if ENV['TEST_ACTIVERECORD']
6
- class SpatialScopesTests < ActiveRecord::TestCase
7
- include TestHelper
8
- include ActiveRecord::TestFixtures
9
-
10
- self.fixture_path = File.join(File.dirname(__FILE__), 'fixtures')
11
- fixtures :foos, :foo3ds
12
-
13
- def ids_tester(method, args, ids = [], klass = Foo)
14
- geoms = klass.send(method, *Array(args)).all
15
- assert_equal(ids.sort, geoms.collect(&:id).sort)
16
- end
17
-
18
- def test_contains
19
- ids_tester(:st_contains, 'POINT(3 3)', [ 3 ])
20
- end
21
-
22
- def test_containsproperly
23
- ids_tester(:st_containsproperly, 'LINESTRING(-4 -4, 4 4)', [ 3 ])
24
- end
25
-
26
- def test_covers
27
- ids_tester(:st_covers, 'LINESTRING(-4 -4, 4 4)', [ 3 ])
28
- end
29
-
30
- def test_coveredby
31
- ids_tester(:st_coveredby, 'POLYGON((-6 -6, -6 6, 6 6, 6 -6, -6 -6))', [ 1, 3 ])
32
- end
33
-
34
- def test_crosses
35
- ids_tester(:st_crosses, 'LINESTRING(-6 -6, 4 4)', [ 3 ])
36
- end
37
-
38
- def test_disjoint
39
- ids_tester(:st_disjoint, 'POINT(100 100)', [ 1, 2, 3 ])
40
- end
41
-
42
- def test_equal
43
- ids_tester(:st_equals, 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5))', [ 3 ])
44
- end
45
-
46
- def test_intersects
47
- ids_tester(:st_intersects, 'LINESTRING(-5 -5, 10 10)', [ 1, 2, 3 ])
48
- end
49
-
50
- def test_orderingequals
51
- ids_tester(:st_orderingequals, 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5))', [ 3 ])
52
- end
53
-
54
- def test_overlaps
55
- ids_tester(:st_overlaps, 'POLYGON((-6 -6, -5 0, 0 0, 0 -5, -6 -6))', [ 3 ])
56
- end
57
-
58
- def test_touches
59
- ids_tester(:st_touches, 'POLYGON((-5 -5, -5 -10, -10 -10, -10 -5, -5 -5))', [ 3 ])
60
- end
61
-
62
- def test_within
63
- ids_tester(:st_within, 'POLYGON((-5 -5, 5 10, 20 20, 10 5, -5 -5))', [ 1, 2 ])
64
- end
65
-
66
- def test_dwithin
67
- ids_tester(:st_dwithin, [ 'POINT(5 5)', 10 ], [ 1, 2, 3 ])
68
- end
69
-
70
- def test_dfullywithin
71
- ids_tester(:st_dfullywithin, [ 'POINT(5 5)', 10 ], [ 1, 2 ])
72
- end
73
-
74
- def test_geometry_type
75
- ids_tester(:st_geometry_type, 'ST_Point', [ 1, 2 ])
76
- ids_tester(:st_geometry_type, [ 'ST_Point', 'ST_Polygon' ], [ 1, 2, 3 ])
77
- ids_tester(:st_geometry_type, [ 'ST_MultiLineString' ], [])
78
- end
79
-
80
- def test_allow_null
81
- begin
82
- foo = Foo.create(:name => 'four')
83
- ids_tester(:st_contains, [ 'POINT(3 3)', { :allow_null => true } ], [ 3, foo.id ])
84
- ensure
85
- Foo.find_by_name('four').destroy
86
- end
87
- end
88
-
89
- def test_nil_relationship
90
- assert_equal([ 1, 2, 3 ], Foo.st_within(nil).all.collect(&:id).sort)
91
- end
92
-
93
- def test_with_column
94
- assert_equal([1, 2, 3], Foo.st_disjoint('POINT(100 100)', :column => :the_other_geom).all.collect(&:id).sort)
95
- end
96
-
97
- def test_with_srid_switching
98
- assert_equal([1, 2, 3], Foo.st_disjoint('SRID=4326; POINT(100 100)').all.collect(&:id).sort)
99
- end
100
-
101
- def test_with_srid_default
102
- assert_equal([1, 2, 3], Foo.st_disjoint('SRID=default; POINT(100 100)').all.collect(&:id).sort)
103
- assert_equal([3], Foo.st_contains('SRID=default; POINT(-3 -3)').all.collect(&:id).sort)
104
- end
105
-
106
- def test_with_srid_transform
107
- assert_equal([1, 2, 3], Foo.st_disjoint('SRID=4269; POINT(100 100)', :column => :the_other_geom).all.collect(&:id).sort)
108
- assert_equal([3], Foo.st_contains('SRID=4269; POINT(7 7)', :column => :the_other_geom).all.collect(&:id).sort)
109
- end
110
-
111
- def test_order_by_distance
112
- assert_equal([3, 1, 2], Foo.order_by_distance('POINT(1 1)').all.collect(&:id))
113
- end
114
-
115
- def test_order_by_distance_desc
116
- assert_equal([2, 1, 3], Foo.order_by_distance('POINT(1 1)', :desc => true).all.collect(&:id))
117
- end
118
-
119
- def test_order_by_distance_sphere
120
- assert_equal([3, 1, 2], Foo.order_by_distance_sphere('POINT(1 1)').all.collect(&:id))
121
- end
122
-
123
- def test_order_by_distance_sphere_desc
124
- assert_equal([2, 1, 3], Foo.order_by_distance_sphere('POINT(1 1)', :desc => true).all.collect(&:id))
125
- end
126
-
127
- def test_order_by_max_distance
128
- assert_equal([1, 3, 2], Foo.order_by_maxdistance('POINT(1 1)').all.collect(&:id))
129
- end
130
-
131
- def test_order_by_max_distance_desc
132
- assert_equal([2, 3, 1], Foo.order_by_maxdistance('POINT(1 1)', :desc => true).all.collect(&:id))
133
- end
134
-
135
- def test_order_by_area
136
- assert_equal([1, 2, 3], Foo.order_by_area.order('id').all.collect(&:id))
137
- end
138
-
139
- def test_order_by_area_desc
140
- assert_equal([3, 1, 2], Foo.order_by_area(:desc => true).order('id').all.collect(&:id))
141
- end
142
-
143
- def test_order_by_ndims
144
- assert_equal([1, 2, 3], Foo.order_by_ndims.order('id').all.collect(&:id))
145
- end
146
-
147
- def test_order_by_ndims_desc
148
- assert_equal([1, 2, 3], Foo.order_by_ndims(:desc => true).order('id').all.collect(&:id))
149
- end
150
-
151
- def test_order_by_npoints
152
- assert_equal([1, 2, 3], Foo.order_by_npoints.order('id').all.collect(&:id))
153
- end
154
-
155
- def test_order_by_npoints_desc
156
- assert_equal([3, 1, 2], Foo.order_by_npoints(:desc => true).order('id').all.collect(&:id))
157
- end
158
-
159
- def test_order_by_nrings
160
- assert_equal([1, 2, 3], Foo.order_by_nrings.order('id').all.collect(&:id))
161
- end
162
-
163
- def test_order_by_nrings_desc
164
- assert_equal([3, 1, 2], Foo.order_by_nrings(:desc => true).order('id').all.collect(&:id))
165
- end
166
-
167
- def test_order_by_numgeometries
168
- assert_equal([1, 2, 3], Foo.order_by_numgeometries.order('id').all.collect(&:id))
169
- end
170
-
171
- def test_order_by_numgeometries_desc
172
- assert_equal([1, 2, 3], Foo.order_by_numgeometries(:desc => true).order('id').all.collect(&:id))
173
- end
174
-
175
- def test_order_by_numinteriorring
176
- assert_equal([3, 1, 2], Foo.order_by_numinteriorring.order('id').all.collect(&:id))
177
- end
178
-
179
- def test_order_by_numinteriorring_desc
180
- assert_equal([1, 2, 3], Foo.order_by_numinteriorring(:desc => true).order('id').all.collect(&:id))
181
- end
182
-
183
- def test_order_by_numinteriorrings
184
- assert_equal([3, 1, 2], Foo.order_by_numinteriorrings.order('id').all.collect(&:id))
185
- end
186
-
187
- def test_order_by_numinteriorrings_desc
188
- assert_equal([1, 2, 3], Foo.order_by_numinteriorrings(:desc => true).order('id').all.collect(&:id))
189
- end
190
-
191
- def test_order_by_numpoints
192
- assert_equal([1, 2, 3], Foo.order_by_numpoints.order('id').all.collect(&:id))
193
- end
194
-
195
- def test_order_by_numpoints_desc
196
- assert_equal([1, 2, 3], Foo.order_by_numpoints(:desc => true).order('id').all.collect(&:id))
197
- end
198
-
199
- def test_order_by_length3d
200
- assert_equal([1, 2, 3], Foo.order_by_length3d.order('id').all.collect(&:id))
201
- end
202
-
203
- def test_order_by_length3d_desc
204
- assert_equal([1, 2, 3], Foo.order_by_length3d(:desc => true).order('id').all.collect(&:id))
205
- end
206
-
207
- def test_order_by_length
208
- assert_equal([1, 2, 3], Foo.order_by_length.order('id').all.collect(&:id))
209
- end
210
-
211
- def test_order_by_length_desc
212
- assert_equal([1, 2, 3], Foo.order_by_length(:desc => true).order('id').all.collect(&:id))
213
- end
214
-
215
- def test_order_by_length2d
216
- assert_equal([1, 2, 3], Foo.order_by_length2d.order('id').all.collect(&:id))
217
- end
218
-
219
- def test_order_by_length2d_desc
220
- assert_equal([1, 2, 3], Foo.order_by_length2d(:desc => true).order('id').all.collect(&:id))
221
- end
222
-
223
- def test_order_by_length3d_spheroid
224
- assert_equal([1, 2, 3], Foo.order_by_length3d_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]').order('id').all.collect(&:id))
225
- end
226
-
227
- def test_order_by_length3d_spheroid_desc
228
- expected = if Geos::ActiveRecord.POSTGIS[:lib] >= '2.0'
229
- [3, 1, 2]
230
- else
231
- [1, 2, 3]
232
- end
233
-
234
- assert_equal(expected, Foo.order_by_length3d_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]', :desc => true).order('id').all.collect(&:id))
235
- end
236
-
237
- def test_order_by_length2d_spheroid
238
- assert_equal([1, 2, 3], Foo.order_by_length2d_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]').order('id').all.collect(&:id))
239
- end
240
-
241
- def test_order_by_length2d_spheroid_desc
242
- assert_equal([3, 1, 2], Foo.order_by_length2d_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]', :desc => true).order('id').all.collect(&:id))
243
- end
244
-
245
- def test_order_by_length_spheroid
246
- assert_equal([1, 2, 3], Foo.order_by_length_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]').order('id').all.collect(&:id))
247
- end
248
-
249
- def test_order_by_length_spheroid_desc
250
- expected = if Geos::ActiveRecord.POSTGIS[:lib] >= '2.0'
251
- [3, 1, 2]
252
- else
253
- [1, 2, 3]
254
- end
255
-
256
- assert_equal(expected, Foo.order_by_length_spheroid('SPHEROID["WGS 84", 6378137, 298.257223563]', :desc => true).order('id').all.collect(&:id))
257
- end
258
-
259
- def test_order_by_perimeter
260
- assert_equal([1, 2, 3], Foo.order_by_perimeter.order('id').all.collect(&:id))
261
- end
262
-
263
- def test_order_by_perimeter_desc
264
- assert_equal([3, 1, 2], Foo.order_by_perimeter(:desc => true).order('id').all.collect(&:id))
265
- end
266
-
267
- def test_order_by_perimeter2d
268
- assert_equal([1, 2, 3], Foo.order_by_perimeter2d.order('id').all.collect(&:id))
269
- end
270
-
271
- def test_order_by_perimeter2d_desc
272
- assert_equal([3, 1, 2], Foo.order_by_perimeter2d(:desc => true).order('id').all.collect(&:id))
273
- end
274
-
275
- def test_order_by_perimeter3d
276
- assert_equal([1, 2, 3], Foo.order_by_perimeter3d.order('id').all.collect(&:id))
277
- end
278
-
279
- def test_order_by_perimeter3d_desc
280
- assert_equal([3, 1, 2], Foo.order_by_perimeter3d(:desc => true).order('id').all.collect(&:id))
281
- end
282
-
283
- def test_order_by_hausdorffdistance
284
- assert_equal([1, 3, 2], Foo.order_by_hausdorffdistance('POINT(1 1)').all.collect(&:id))
285
- end
286
-
287
- def test_order_by_hausdorffdistance_desc
288
- assert_equal([2, 3, 1], Foo.order_by_hausdorffdistance('POINT(1 1)', :desc => true).all.collect(&:id))
289
- end
290
-
291
- def test_order_by_hausdorffdistance_with_densify_frac
292
- assert_equal([1, 3, 2], Foo.order_by_hausdorffdistance('POINT(1 1)', 0.314).all.collect(&:id))
293
- end
294
-
295
- def test_order_by_distance_spheroid
296
- assert_equal([2, 3, 1], Foo.order_by_distance_spheroid('POINT(10 10)', 'SPHEROID["WGS 84", 6378137, 298.257223563]').order('id').all.collect(&:id))
297
- end
298
-
299
- def test_order_by_distance_spheroid_desc
300
- assert_equal([1, 3, 2], Foo.order_by_distance_spheroid('POINT(10 10)', 'SPHEROID["WGS 84", 6378137, 298.257223563]', :desc => true).order('id').all.collect(&:id))
301
- end
302
-
303
- def test_order_by_area_with_desc_symbol
304
- assert_equal([3, 1, 2], Foo.order_by_area(:desc).order('id').all.collect(&:id))
305
- end
306
-
307
- if Foo3d.respond_to?(:st_3dintersects)
308
- def test_3dintersects
309
- ids_tester(:st_3dintersects, 'LINESTRING(-5 -5 -5, 10 10 10)', [ 1, 3 ], Foo3d)
310
- end
311
- end
312
-
313
- if Foo3d.respond_to?(:order_by_3ddistance)
314
- def test_3ddistance
315
- assert_equal([3, 2, 1], Foo3d.order_by_3ddistance('POINT(10 10)').order('id').all.collect(&:id))
316
- end
317
- end
318
-
319
- if Foo3d.respond_to?(:order_by_3dmaxdistance)
320
- def test_3dmaxdistance
321
- assert_equal([2, 1, 3], Foo3d.order_by_3dmaxdistance('POINT(10 10)').order('id').all.collect(&:id))
322
- end
323
- end
324
-
325
- if Foo3d.respond_to?(:st_3ddwithin)
326
- def test_3ddwithin
327
- ids_tester(:st_3ddwithin, [ 'LINESTRING(-5 -5 -5, 10 10 10)', 10 ], [ 1, 2, 3 ], Foo3d)
328
- end
329
- end
330
-
331
- if Foo3d.respond_to?(:st_3ddfullywithin)
332
- def test_3ddfullywithin
333
- ids_tester(:st_3ddfullywithin, [ 'LINESTRING(-10 -10 -10, 10 10 10)', 100 ], [ 1, 2, 3 ], Foo3d)
334
- end
335
- end
336
- end
337
- end