geos-extensions 0.2.2 → 0.3.0

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 (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
@@ -8,14 +8,23 @@ rescue LoadError
8
8
  # do nothing
9
9
  end
10
10
 
11
- class GoogleMapsApi2Tests < Test::Unit::TestCase
11
+ class GoogleMapsApi2Tests < MiniTest::Unit::TestCase
12
12
  include TestHelper
13
13
 
14
+ def initialize(*args)
15
+ @point = Geos.read(POINT_WKT)
16
+ @polygon = Geos.read(POLYGON_WKT)
17
+ @linestring = Geos.read(LINESTRING_WKT)
18
+ @multipoint = Geos.read(MULTIPOINT_WKT)
19
+ @multipolygon = Geos.read(MULTIPOLYGON_WKT)
20
+ @multilinestring = Geos.read(MULTILINESTRING_WKT)
21
+ @geometrycollection = Geos.read(GEOMETRYCOLLECTION_WKT)
22
+
23
+ super
24
+ end
25
+
14
26
  def setup
15
27
  Geos::GoogleMaps.use_api(2)
16
-
17
- @point = Geos.read(POINT_EWKB)
18
- @polygon = Geos.read(POLYGON_EWKB)
19
28
  end
20
29
 
21
30
  def test_to_g_lat_lng
@@ -25,45 +34,58 @@ class GoogleMapsApi2Tests < Test::Unit::TestCase
25
34
 
26
35
  def test_to_g_lat_lng_bounds_string
27
36
  assert_equal('((10.0100000000,10.0000000000), (10.0100000000,10.0000000000))', @point.to_g_lat_lng_bounds_string)
28
- assert_equal('((0.0000000000,0.0000000000), (5.0000000000,5.0000000000))', @polygon.to_g_lat_lng_bounds_string)
37
+ assert_equal('((0.0000000000,0.0000000000), (2.5000000000,5.0000000000))', @polygon.to_g_lat_lng_bounds_string)
38
+ end
39
+
40
+ def test_to_g_url_value_point
41
+ assert_equal('10.010000,10.000000', @point.to_g_url_value)
42
+ assert_equal('10.010,10.000', @point.to_g_url_value(3))
43
+ end
44
+
45
+ def test_to_g_url_value_polygon
46
+ assert_equal('0.000000,0.000000,2.500000,5.000000', @polygon.to_g_url_value)
47
+ assert_equal('0.000,0.000,2.500,5.000', @polygon.to_g_url_value(3))
48
+ end
49
+
50
+ def test_to_g_url_value_line_string
51
+ assert_equal('0.000000,0.000000,10.000000,10.000000', @linestring.to_g_url_value)
52
+ assert_equal('0.000,0.000,10.000,10.000', @linestring.to_g_url_value(3))
53
+ end
54
+
55
+ def test_to_g_url_value_multi_point
56
+ assert_equal('0.000000,0.000000,10.000000,10.000000', @multipoint.to_g_url_value)
57
+ assert_equal('0.000,0.000,10.000,10.000', @multipoint.to_g_url_value(3))
58
+ end
59
+
60
+ def test_to_g_url_value_multi_polygon
61
+ assert_equal('0.000000,0.000000,15.000000,15.000000', @multipolygon.to_g_url_value)
62
+ assert_equal('0.000,0.000,15.000,15.000', @multipolygon.to_g_url_value(3))
63
+ end
64
+
65
+ def test_to_g_url_value_multi_line_string
66
+ assert_equal('-20.000000,-20.000000,30.000000,30.000000', @multilinestring.to_g_url_value)
67
+ assert_equal('-20.000,-20.000,30.000,30.000', @multilinestring.to_g_url_value(3))
29
68
  end
30
69
 
31
- def test_to_jsonable
32
- assert_equal({
33
- :type => "point",
34
- :lat => 10.01,
35
- :lng => 10.0
36
- }, @point.to_jsonable)
37
-
38
- assert_equal({
39
- :type => "polygon",
40
- :polylines => [{
41
- :points => "??_ibE_ibE_~cH_~cH_hgN_hgN~po]~po]",
42
- :bounds => {
43
- :sw => [ 0.0, 0.0 ],
44
- :ne => [ 5.0, 5.0 ]
45
- },
46
- :levels=>"BBBBB"
47
- }],
48
- :options => {},
49
- :encoded => true
50
- }, @polygon.to_jsonable)
70
+ def test_to_g_url_value_geometry_collection
71
+ assert_equal('0.000000,0.000000,14.000000,14.000000', @geometrycollection.to_g_url_value)
72
+ assert_equal('0.000,0.000,14.000,14.000', @geometrycollection.to_g_url_value(3))
51
73
  end
52
74
 
53
75
  if defined?(JSON)
54
76
  def test_to_g_polygon
55
77
  assert_equal(
56
- "new google.maps.Polygon([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], null, null, null, null, null, null)",
78
+ "new google.maps.Polygon([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 0.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(2.5, 5.0), new google.maps.LatLng(0.0, 0.0)], null, null, null, null, null, null)",
57
79
  @polygon.to_g_polygon
58
80
  )
59
81
 
60
82
  assert_equal(
61
- "new GPolygon([new GLatLng(0.0, 0.0), new GLatLng(1.0, 1.0), new GLatLng(2.5, 2.5), new GLatLng(5.0, 5.0), new GLatLng(0.0, 0.0)], null, null, null, null, null, null)",
83
+ "new GPolygon([new GLatLng(0.0, 0.0), new GLatLng(1.0, 0.0), new GLatLng(2.5, 2.5), new GLatLng(2.5, 5.0), new GLatLng(0.0, 0.0)], null, null, null, null, null, null)",
62
84
  @polygon.to_g_polygon({}, :short_class => true)
63
85
  )
64
86
 
65
87
  assert_equal(
66
- "new google.maps.Polygon([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], '#b00b1e', 5, 0.5, '#b00b1e', null, {\"mouseOutTolerence\":5})",
88
+ "new google.maps.Polygon([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 0.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(2.5, 5.0), new google.maps.LatLng(0.0, 0.0)], '#b00b1e', 5, 0.5, '#b00b1e', null, {\"mouseOutTolerence\":5})",
67
89
  @polygon.to_g_polygon(
68
90
  :stroke_color => '#b00b1e',
69
91
  :stroke_weight => 5,
@@ -78,17 +100,17 @@ class GoogleMapsApi2Tests < Test::Unit::TestCase
78
100
 
79
101
  def test_to_g_polyline
80
102
  assert_equal(
81
- "new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], null, null, null, null)",
103
+ "new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 0.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(2.5, 5.0), new google.maps.LatLng(0.0, 0.0)], null, null, null, null)",
82
104
  @polygon.to_g_polyline
83
105
  )
84
106
 
85
107
  assert_equal(
86
- "new GPolyline([new GLatLng(0.0, 0.0), new GLatLng(1.0, 1.0), new GLatLng(2.5, 2.5), new GLatLng(5.0, 5.0), new GLatLng(0.0, 0.0)], null, null, null, null)",
108
+ "new GPolyline([new GLatLng(0.0, 0.0), new GLatLng(1.0, 0.0), new GLatLng(2.5, 2.5), new GLatLng(2.5, 5.0), new GLatLng(0.0, 0.0)], null, null, null, null)",
87
109
  @polygon.to_g_polyline({}, :short_class => true)
88
110
  )
89
111
 
90
112
  assert_equal(
91
- "new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], '#b00b1e', 5, 0.5, {\"mouseOutTolerence\":5})",
113
+ "new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 0.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(2.5, 5.0), new google.maps.LatLng(0.0, 0.0)], '#b00b1e', 5, 0.5, {\"mouseOutTolerence\":5})",
92
114
  @polygon.to_g_polyline(
93
115
  :color => '#b00b1e',
94
116
  :weight => 5,
@@ -182,7 +204,7 @@ class GoogleMapsApi2Tests < Test::Unit::TestCase
182
204
 
183
205
  def test_to_g_lat_lon_box
184
206
  assert_equal(
185
- { :east => 5.0, :west => 0.0, :north => 5.0, :south => 0.0},
207
+ { :east => 5.0, :west => 0.0, :north => 2.5, :south => 0.0},
186
208
  @polygon.to_g_lat_lon_box
187
209
  )
188
210
  end
@@ -8,14 +8,23 @@ rescue LoadError
8
8
  # do nothing
9
9
  end
10
10
 
11
- class GoogleMapsApi3Tests < Test::Unit::TestCase
11
+ class GoogleMapsApi3Tests < MiniTest::Unit::TestCase
12
12
  include TestHelper
13
13
 
14
+ def initialize(*args)
15
+ @point = Geos.read(POINT_WKT)
16
+ @polygon = Geos.read(POLYGON_WKT)
17
+ @linestring = Geos.read(LINESTRING_WKT)
18
+ @multipoint = Geos.read(MULTIPOINT_WKT)
19
+ @multipolygon = Geos.read(MULTIPOLYGON_WKT)
20
+ @multilinestring = Geos.read(MULTILINESTRING_WKT)
21
+ @geometrycollection = Geos.read(GEOMETRYCOLLECTION_WKT)
22
+
23
+ super
24
+ end
25
+
14
26
  def setup
15
27
  Geos::GoogleMaps.use_api(3)
16
-
17
- @point = Geos.read(POINT_EWKB)
18
- @polygon = Geos.read(POLYGON_EWKB)
19
28
  end
20
29
 
21
30
  def test_to_g_lat_lng
@@ -25,34 +34,47 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
25
34
 
26
35
  def test_to_g_lat_lng_bounds_string
27
36
  assert_equal('((10.0100000000,10.0000000000), (10.0100000000,10.0000000000))', @point.to_g_lat_lng_bounds_string)
28
- assert_equal('((0.0000000000,0.0000000000), (5.0000000000,5.0000000000))', @polygon.to_g_lat_lng_bounds_string)
37
+ assert_equal('((0.0000000000,0.0000000000), (2.5000000000,5.0000000000))', @polygon.to_g_lat_lng_bounds_string)
29
38
  end
30
39
 
31
- def test_to_g_geocoder_bounds_api3
40
+ def test_to_g_geocoder_bounds
32
41
  assert_equal('10.010000,10.000000|10.010000,10.000000', @point.to_g_geocoder_bounds)
33
- assert_equal('0.000000,0.000000|5.000000,5.000000', @polygon.to_g_geocoder_bounds)
42
+ assert_equal('0.000000,0.000000|2.500000,5.000000', @polygon.to_g_geocoder_bounds)
43
+ end
44
+
45
+ def test_to_g_url_value_point
46
+ assert_equal('10.010000,10.000000', @point.to_g_url_value)
47
+ assert_equal('10.010,10.000', @point.to_g_url_value(3))
48
+ end
49
+
50
+ def test_to_g_url_value_polygon
51
+ assert_equal('0.000000,0.000000,2.500000,5.000000', @polygon.to_g_url_value)
52
+ assert_equal('0.000,0.000,2.500,5.000', @polygon.to_g_url_value(3))
53
+ end
54
+
55
+ def test_to_g_url_value_line_string
56
+ assert_equal('0.000000,0.000000,10.000000,10.000000', @linestring.to_g_url_value)
57
+ assert_equal('0.000,0.000,10.000,10.000', @linestring.to_g_url_value(3))
58
+ end
59
+
60
+ def test_to_g_url_value_multi_point
61
+ assert_equal('0.000000,0.000000,10.000000,10.000000', @multipoint.to_g_url_value)
62
+ assert_equal('0.000,0.000,10.000,10.000', @multipoint.to_g_url_value(3))
63
+ end
64
+
65
+ def test_to_g_url_value_multi_polygon
66
+ assert_equal('0.000000,0.000000,15.000000,15.000000', @multipolygon.to_g_url_value)
67
+ assert_equal('0.000,0.000,15.000,15.000', @multipolygon.to_g_url_value(3))
68
+ end
69
+
70
+ def test_to_g_url_value_multi_line_string
71
+ assert_equal('-20.000000,-20.000000,30.000000,30.000000', @multilinestring.to_g_url_value)
72
+ assert_equal('-20.000,-20.000,30.000,30.000', @multilinestring.to_g_url_value(3))
34
73
  end
35
74
 
36
- def test_to_jsonable
37
- assert_equal({
38
- :type => "point",
39
- :lat => 10.01,
40
- :lng => 10.0
41
- }, @point.to_jsonable)
42
-
43
- assert_equal({
44
- :type => "polygon",
45
- :polylines => [{
46
- :points => "??_ibE_ibE_~cH_~cH_hgN_hgN~po]~po]",
47
- :bounds => {
48
- :sw => [ 0.0, 0.0 ],
49
- :ne => [ 5.0, 5.0 ]
50
- },
51
- :levels=>"BBBBB"
52
- }],
53
- :options => {},
54
- :encoded => true
55
- }, @polygon.to_jsonable)
75
+ def test_to_g_url_value_geometry_collection
76
+ assert_equal('0.000000,0.000000,14.000000,14.000000', @geometrycollection.to_g_url_value)
77
+ assert_equal('0.000,0.000,14.000,14.000', @geometrycollection.to_g_url_value(3))
56
78
  end
57
79
 
58
80
  if defined?(JSON)
@@ -67,7 +89,7 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
67
89
  def test_to_g_polygon
68
90
  poly_tester('Polygon', {
69
91
  "paths" => [
70
- [0.0, 0.0], [1.0, 1.0], [2.5, 2.5], [5.0, 5.0], [0.0, 0.0]
92
+ [0.0, 0.0], [1.0, 0.0], [2.5, 2.5], [2.5, 5.0], [0.0, 0.0]
71
93
  ]
72
94
  }, @polygon.to_g_polygon)
73
95
 
@@ -78,11 +100,11 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
78
100
  'fillColor' => '#b00b1e',
79
101
  'map' => 'map',
80
102
  'paths' => [
81
- [ 0.0, 0.0 ],
82
- [ 1.0, 1.0 ],
83
- [ 2.5, 2.5 ],
84
- [ 5.0, 5.0 ],
85
- [ 0.0, 0.0 ]
103
+ [0.0, 0.0],
104
+ [1.0, 0.0],
105
+ [2.5, 2.5],
106
+ [2.5, 5.0],
107
+ [0.0, 0.0]
86
108
  ]
87
109
  }, @polygon.to_g_polygon(
88
110
  :stroke_color => '#b00b1e',
@@ -169,7 +191,7 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
169
191
  def test_to_g_polyline
170
192
  poly_tester("Polyline", {
171
193
  "path" => [
172
- [0.0, 0.0], [1.0, 1.0], [2.5, 2.5], [5.0, 5.0], [0.0, 0.0]
194
+ [0.0, 0.0], [1.0, 0.0], [2.5, 2.5], [2.5, 5.0], [0.0, 0.0]
173
195
  ]
174
196
  }, @polygon.to_g_polyline)
175
197
 
@@ -179,7 +201,7 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
179
201
  "strokeOpacity" => 0.5,
180
202
  "map" => "map",
181
203
  "path" => [
182
- [0.0, 0.0], [1.0, 1.0], [2.5, 2.5], [5.0, 5.0], [0.0, 0.0]
204
+ [0.0, 0.0], [1.0, 0.0], [2.5, 2.5], [2.5, 5.0], [0.0, 0.0]
183
205
  ]
184
206
  }, @polygon.to_g_polyline(
185
207
  :stroke_color => '#b00b1e',
@@ -241,7 +263,7 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
241
263
 
242
264
  def test_to_g_lat_lon_box
243
265
  assert_equal(
244
- { :east => 5.0, :west => 0.0, :north => 5.0, :south => 0.0},
266
+ { :east => 5.0, :west => 0.0, :north => 2.5, :south => 0.0},
245
267
  @polygon.to_g_lat_lon_box
246
268
  )
247
269
  end
@@ -2,7 +2,7 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class GoogleMapsPolylineEncoderTests < Test::Unit::TestCase
5
+ class GoogleMapsPolylineEncoderTests < MiniTest::Unit::TestCase
6
6
  include TestHelper
7
7
 
8
8
  ENCODED = '_p~iF~ps|U_ulLnnqC_mqNvxq`@'
@@ -0,0 +1,28 @@
1
+
2
+ $: << File.dirname(__FILE__)
3
+ require 'test_helper'
4
+
5
+ class HelperTests
6
+ class ArrayWrapTests < MiniTest::Unit::TestCase
7
+ include TestHelper
8
+
9
+ def test_array
10
+ ary = %w(foo bar)
11
+ assert_same ary, Geos::Helper.array_wrap(ary)
12
+ end
13
+
14
+ def test_nil
15
+ assert_equal [], Geos::Helper.array_wrap(nil)
16
+ end
17
+
18
+ def test_object
19
+ o = Object.new
20
+ assert_equal [ o ], Geos::Helper.array_wrap(o)
21
+ end
22
+
23
+ def test_string
24
+ assert_equal [ "foo" ], Geos::Helper.array_wrap("foo")
25
+ end
26
+ end
27
+ end
28
+
@@ -2,7 +2,7 @@
2
2
  $: << File.dirname(__FILE__)
3
3
  require 'test_helper'
4
4
 
5
- class GeosMiscTests < Test::Unit::TestCase
5
+ class GeosMiscTests < MiniTest::Unit::TestCase
6
6
  include TestHelper
7
7
 
8
8
  def initialize(*args)
@@ -15,25 +15,55 @@ class GeosMiscTests < Test::Unit::TestCase
15
15
  g.to_wkt(:rounding_precision => 0)
16
16
  end
17
17
 
18
+ def test_sanity_of_test_geometries
19
+ %w{
20
+ POINT_WKT
21
+ POINT_EWKT
22
+ POINT_WKB
23
+ POINT_WKB_BIN
24
+ POINT_EWKB
25
+ POINT_EWKB_BIN
26
+ POINT_G_LAT_LNG
27
+ POINT_G_LAT_LNG_URL_VALUE
28
+ POLYGON_WKT
29
+ POLYGON_EWKT
30
+ POLYGON_WKB
31
+ POLYGON_WKB_BIN
32
+ POLYGON_EWKB
33
+ POLYGON_EWKB_BIN
34
+ POLYGON_WITH_INTERIOR_RING
35
+ LINESTRING_WKT
36
+ GEOMETRYCOLLECTION_WKT
37
+ MULTIPOINT_WKT
38
+ MULTIPOLYGON_WKT
39
+ MULTILINESTRING_WKT
40
+ BOUNDS_G_LAT_LNG
41
+ BOUNDS_G_LAT_LNG_URL_VALUE
42
+ }.each do |constant_name|
43
+ geom = Geos.read(self.class.const_get(constant_name))
44
+ assert_equal("Valid Geometry", geom.valid_reason)
45
+ end
46
+ end
47
+
18
48
  def test_upper_left
19
- assert_equal('POINT (0 5)', write(@polygon.upper_left))
49
+ assert_equal('POINT (0 2)', write(@polygon.upper_left))
20
50
  assert_equal('POINT (10 10)', write(@point.upper_left))
21
51
 
22
- assert_equal('POINT (0 5)', write(@polygon.northwest))
52
+ assert_equal('POINT (0 2)', write(@polygon.northwest))
23
53
  assert_equal('POINT (10 10)', write(@point.northwest))
24
54
 
25
- assert_equal('POINT (0 5)', write(@polygon.nw))
55
+ assert_equal('POINT (0 2)', write(@polygon.nw))
26
56
  assert_equal('POINT (10 10)', write(@point.nw))
27
57
  end
28
58
 
29
59
  def test_upper_right
30
- assert_equal('POINT (5 5)', write(@polygon.upper_right))
60
+ assert_equal('POINT (5 2)', write(@polygon.upper_right))
31
61
  assert_equal('POINT (10 10)', write(@point.upper_right))
32
62
 
33
- assert_equal('POINT (5 5)', write(@polygon.northeast))
63
+ assert_equal('POINT (5 2)', write(@polygon.northeast))
34
64
  assert_equal('POINT (10 10)', write(@point.northeast))
35
65
 
36
- assert_equal('POINT (5 5)', write(@polygon.ne))
66
+ assert_equal('POINT (5 2)', write(@polygon.ne))
37
67
  assert_equal('POINT (10 10)', write(@point.ne))
38
68
  end
39
69
 
@@ -60,13 +90,13 @@ class GeosMiscTests < Test::Unit::TestCase
60
90
  end
61
91
 
62
92
  def test_top
63
- assert_equal(5.0, @polygon.top)
93
+ assert_equal(2.5, @polygon.top)
64
94
  assert_equal(10.01, @point.top)
65
95
 
66
- assert_equal(5.0, @polygon.north)
96
+ assert_equal(2.5, @polygon.north)
67
97
  assert_equal(10.01, @point.north)
68
98
 
69
- assert_equal(5.0, @polygon.n)
99
+ assert_equal(2.5, @polygon.n)
70
100
  assert_equal(10.01, @point.n)
71
101
  end
72
102
 
@@ -102,4 +132,94 @@ class GeosMiscTests < Test::Unit::TestCase
102
132
  assert_equal(5.0, @polygon.e)
103
133
  assert_equal(10.0, @point.e)
104
134
  end
135
+
136
+ def test_lat_lng
137
+ linestring = Geos.read('LINESTRING(0 0, 20 25)')
138
+
139
+ %w{
140
+ lat_lng
141
+ latlng
142
+ latlong
143
+ lat_lon
144
+ latlon
145
+ }.each do |m|
146
+ assert_equal([ 10.01, 10.0 ], @point.send(m))
147
+ assert_equal([ 12.5, 10.0 ], linestring.envelope.send(m))
148
+ end
149
+ end
150
+
151
+ def test_lng_lat
152
+ linestring = Geos.read('LINESTRING(0 0, 20 25)')
153
+
154
+ %w{
155
+ long_lat
156
+ lnglat
157
+ longlat
158
+ lon_lat
159
+ lonlat
160
+ }.each do |m|
161
+ assert_equal([ 10.0, 10.01 ], @point.send(m))
162
+ assert_equal([ 10.0, 12.5 ], linestring.envelope.send(m))
163
+ end
164
+ end
165
+
166
+ def test_to_bbox_with_point
167
+ point_bbox = @point.to_bbox
168
+
169
+ assert_equal(10.01, point_bbox[:north])
170
+ assert_equal(10.0, point_bbox[:east])
171
+ assert_equal(10.01, point_bbox[:south])
172
+ assert_equal(10, point_bbox[:west])
173
+ end
174
+
175
+ def test_to_bbox_with_point_with_explicit_long_names
176
+ point_bbox = @point.to_bbox(:long)
177
+
178
+ assert_equal(10.01, point_bbox[:north])
179
+ assert_equal(10.0, point_bbox[:east])
180
+ assert_equal(10.01, point_bbox[:south])
181
+ assert_equal(10, point_bbox[:west])
182
+ end
183
+
184
+ def test_to_bbox_with_point_with_short_names
185
+ point_bbox = @point.to_bbox(:short)
186
+
187
+ assert_equal(10.01, point_bbox[:n])
188
+ assert_equal(10.0, point_bbox[:e])
189
+ assert_equal(10.01, point_bbox[:s])
190
+ assert_equal(10, point_bbox[:w])
191
+ end
192
+
193
+ def test_to_bbox_with_polygon
194
+ polygon_bbox = @polygon.to_bbox
195
+
196
+ assert_equal(2.5, polygon_bbox[:north])
197
+ assert_equal(5.0, polygon_bbox[:east])
198
+ assert_equal(0, polygon_bbox[:south])
199
+ assert_equal(0, polygon_bbox[:west])
200
+ end
201
+
202
+ def test_to_bbox_with_polygon_explicit_long_names
203
+ polygon_bbox = @polygon.to_bbox(:long)
204
+
205
+ assert_equal(2.5, polygon_bbox[:north])
206
+ assert_equal(5.0, polygon_bbox[:east])
207
+ assert_equal(0, polygon_bbox[:south])
208
+ assert_equal(0, polygon_bbox[:west])
209
+ end
210
+
211
+ def test_to_bbox_with_polygon_with_short_names
212
+ polygon_bbox = @polygon.to_bbox(:short)
213
+
214
+ assert_equal(2.5, polygon_bbox[:n])
215
+ assert_equal(5.0, polygon_bbox[:e])
216
+ assert_equal(0, polygon_bbox[:s])
217
+ assert_equal(0, polygon_bbox[:w])
218
+ end
219
+
220
+ def test_to_bbox_with_invalid_long_or_short_value
221
+ assert_raises(ArgumentError) do
222
+ @point.to_bbox(:blart)
223
+ end
224
+ end
105
225
  end