georuby 2.3.0 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -9
  3. data/Rakefile +13 -14
  4. data/lib/geo_ruby/ewk.rb +2 -0
  5. data/lib/geo_ruby/{simple_features → ewk}/ewkb_parser.rb +206 -218
  6. data/lib/geo_ruby/ewk/ewkt_parser.rb +321 -0
  7. data/lib/geo_ruby/geojson.rb +27 -32
  8. data/lib/geo_ruby/georss.rb +88 -66
  9. data/lib/geo_ruby/gpx.rb +113 -1
  10. data/lib/geo_ruby/kml.rb +43 -31
  11. data/lib/geo_ruby/shp.rb +1 -0
  12. data/lib/geo_ruby/shp4r/dbf.rb +7 -3
  13. data/lib/geo_ruby/shp4r/shp.rb +297 -284
  14. data/lib/geo_ruby/simple_features.rb +2 -6
  15. data/lib/geo_ruby/simple_features/circle.rb +15 -13
  16. data/lib/geo_ruby/simple_features/envelope.rb +84 -77
  17. data/lib/geo_ruby/simple_features/geometry.rb +89 -69
  18. data/lib/geo_ruby/simple_features/geometry_collection.rb +46 -43
  19. data/lib/geo_ruby/simple_features/geometry_factory.rb +50 -47
  20. data/lib/geo_ruby/simple_features/helper.rb +14 -14
  21. data/lib/geo_ruby/simple_features/line_string.rb +94 -97
  22. data/lib/geo_ruby/simple_features/linear_ring.rb +4 -9
  23. data/lib/geo_ruby/simple_features/multi_line_string.rb +18 -21
  24. data/lib/geo_ruby/simple_features/multi_point.rb +18 -20
  25. data/lib/geo_ruby/simple_features/multi_polygon.rb +19 -25
  26. data/lib/geo_ruby/simple_features/point.rb +134 -128
  27. data/lib/geo_ruby/simple_features/polygon.rb +60 -59
  28. data/lib/geo_ruby/version.rb +1 -1
  29. data/spec/data/geojson/feature.json +9 -0
  30. data/spec/data/geojson/feature_collection.json +3 -4
  31. data/spec/geo_ruby/{simple_features → ewk}/ewkb_parser_spec.rb +56 -57
  32. data/spec/geo_ruby/{simple_features → ewk}/ewkt_parser_spec.rb +62 -63
  33. data/spec/geo_ruby/geojson_spec.rb +34 -17
  34. data/spec/geo_ruby/georss_spec.rb +76 -64
  35. data/spec/geo_ruby/{gpx4r/gpx_spec.rb → gpx_spec.rb} +25 -25
  36. data/spec/geo_ruby/kml_spec.rb +40 -36
  37. data/spec/geo_ruby/shp4r/shp_spec.rb +51 -51
  38. data/spec/geo_ruby/simple_features/circle_spec.rb +2 -2
  39. data/spec/geo_ruby/simple_features/envelope_spec.rb +8 -8
  40. data/spec/geo_ruby/simple_features/geometry_collection_spec.rb +26 -26
  41. data/spec/geo_ruby/simple_features/geometry_factory_spec.rb +5 -5
  42. data/spec/geo_ruby/simple_features/geometry_spec.rb +8 -8
  43. data/spec/geo_ruby/simple_features/line_string_spec.rb +102 -102
  44. data/spec/geo_ruby/simple_features/linear_ring_spec.rb +7 -7
  45. data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +20 -20
  46. data/spec/geo_ruby/simple_features/multi_point_spec.rb +16 -16
  47. data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +19 -19
  48. data/spec/geo_ruby/simple_features/point_spec.rb +180 -174
  49. data/spec/geo_ruby/simple_features/polygon_spec.rb +55 -56
  50. data/spec/geo_ruby_spec.rb +4 -4
  51. data/spec/spec_helper.rb +19 -13
  52. metadata +10 -9
  53. data/lib/geo_ruby/gpx4r/gpx.rb +0 -118
  54. data/lib/geo_ruby/simple_features/ewkt_parser.rb +0 -336
@@ -2,119 +2,118 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
3
  describe GeoRuby::SimpleFeatures::Polygon do
4
4
 
5
- describe "Instance Methods" do
5
+ describe 'Instance Methods' do
6
6
 
7
- let(:poly) { GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256) }
7
+ let(:poly) { GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [4, 0], [4, 4], [0, 4], [0, 0]], [[1, 1], [3, 1], [3, 3], [1, 3], [1, 1]]], 256) }
8
8
 
9
- it "should check if contains point" do
9
+ it 'should check if contains point' do
10
10
  expect(poly.contains_point?(GeoRuby::SimpleFeatures::Point.from_x_y(3, 3))).to be_truthy
11
11
  end
12
12
 
13
- it "should check if not contains point" do
13
+ it 'should check if not contains point' do
14
14
  expect(poly.contains_point?(GeoRuby::SimpleFeatures::Point.from_x_y(5, 5))).to be_falsey
15
15
  end
16
16
 
17
17
  end
18
18
 
19
- describe "tu converted" do
20
- #no test of the binary representation for linear_rings : always with polygons and like line_string
21
- it "should test_polygon_creation" do
22
- linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],256)
23
- linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]],256)
24
- point1 = GeoRuby::SimpleFeatures::Point.from_x_y(12.4,-45.3,256)
25
- point2 = GeoRuby::SimpleFeatures::Point.from_x_y(45.4,41.6,256)
26
- point3 = GeoRuby::SimpleFeatures::Point.from_x_y(4.456,1.0698,256)
27
- point4 = GeoRuby::SimpleFeatures::Point.from_x_y(12.4,-45.3,256)
28
- point5 = GeoRuby::SimpleFeatures::Point.from_x_y(2.4,5.3,256)
29
- point6 = GeoRuby::SimpleFeatures::Point.from_x_y(5.4,1.4263,256)
30
- point7 = GeoRuby::SimpleFeatures::Point.from_x_y(14.46,1.06,256)
31
- point8 = GeoRuby::SimpleFeatures::Point.from_x_y(2.4,5.3,256)
32
-
33
- polygon = GeoRuby::SimpleFeatures::Polygon::new(256)
19
+ describe 'tu converted' do
20
+ # no test of the binary representation for linear_rings : always with polygons and like line_string
21
+ it 'should test_polygon_creation' do
22
+ linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], 256)
23
+ linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06], [2.4, 5.3]], 256)
24
+ point1 = GeoRuby::SimpleFeatures::Point.from_x_y(12.4, -45.3, 256)
25
+ point2 = GeoRuby::SimpleFeatures::Point.from_x_y(45.4, 41.6, 256)
26
+ point3 = GeoRuby::SimpleFeatures::Point.from_x_y(4.456, 1.0698, 256)
27
+ point4 = GeoRuby::SimpleFeatures::Point.from_x_y(12.4, -45.3, 256)
28
+ point5 = GeoRuby::SimpleFeatures::Point.from_x_y(2.4, 5.3, 256)
29
+ point6 = GeoRuby::SimpleFeatures::Point.from_x_y(5.4, 1.4263, 256)
30
+ point7 = GeoRuby::SimpleFeatures::Point.from_x_y(14.46, 1.06, 256)
31
+ point8 = GeoRuby::SimpleFeatures::Point.from_x_y(2.4, 5.3, 256)
32
+
33
+ polygon = GeoRuby::SimpleFeatures::Polygon.new(256)
34
34
  expect(polygon.length).to be_zero
35
35
 
36
36
  polygon << linear_ring1
37
37
  expect(polygon.length).to eql(1)
38
38
  expect(polygon[0]).to eq(linear_ring1)
39
39
 
40
- #the validity of the hole is not checked : just for the sake of example
40
+ # the validity of the hole is not checked : just for the sake of example
41
41
  polygon << linear_ring2
42
42
  expect(polygon.length).to eql(2)
43
43
  expect(polygon[1]).to eq(linear_ring2)
44
44
 
45
- polygon = GeoRuby::SimpleFeatures::Polygon.from_linear_rings([linear_ring1,linear_ring2],256)
45
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_linear_rings([linear_ring1, linear_ring2], 256)
46
46
  expect(polygon.class).to eql(GeoRuby::SimpleFeatures::Polygon)
47
47
  expect(polygon.length).to eql(2)
48
48
  expect(polygon[0]).to eq(linear_ring1)
49
49
  expect(polygon[1]).to eq(linear_ring2)
50
50
 
51
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256)
51
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], [[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06], [2.4, 5.3]]], 256)
52
52
  expect(polygon.class).to eql(GeoRuby::SimpleFeatures::Polygon)
53
53
  expect(polygon.length).to eql(2)
54
54
  expect(polygon[0]).to eq(linear_ring1)
55
55
  expect(polygon[1]).to eq(linear_ring2)
56
56
 
57
- polygon = GeoRuby::SimpleFeatures::Polygon.from_points([[point1,point2,point3,point4],[point5,point6,point7,point8]],256)
57
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_points([[point1, point2, point3, point4], [point5, point6, point7, point8]], 256)
58
58
  expect(polygon.length).to eql(2)
59
59
  expect(polygon[0]).to eq(linear_ring1)
60
60
  expect(polygon[1]).to eq(linear_ring2)
61
61
 
62
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3,15.2],[45.4,41.6,2.4],[4.456,1.0698,5.6],[12.4,-45.3,6.1]],[[2.4,5.3,4.5],[5.4,1.4263,4.2],[14.46,1.06,123.1],[2.4,5.3,4.4]]],256,true)
62
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3, 15.2], [45.4, 41.6, 2.4], [4.456, 1.0698, 5.6], [12.4, -45.3, 6.1]], [[2.4, 5.3, 4.5], [5.4, 1.4263, 4.2], [14.46, 1.06, 123.1], [2.4, 5.3, 4.4]]], 256, true)
63
63
  expect(polygon.class).to eql(GeoRuby::SimpleFeatures::Polygon)
64
64
  expect(polygon.length).to eql(2)
65
65
 
66
- linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4,-45.3,15.2],[45.4,41.6,2.4],[4.456,1.0698,5.6],[12.4,-45.3,6.1]],256,true)
67
- linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2.4,5.3,4.5],[5.4,1.4263,4.2],[14.46,1.06,123.1],[2.4,5.3,4.4]],256,true)
66
+ linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4, -45.3, 15.2], [45.4, 41.6, 2.4], [4.456, 1.0698, 5.6], [12.4, -45.3, 6.1]], 256, true)
67
+ linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2.4, 5.3, 4.5], [5.4, 1.4263, 4.2], [14.46, 1.06, 123.1], [2.4, 5.3, 4.4]], 256, true)
68
68
  expect(polygon[0]).to eq(linear_ring1)
69
69
  expect(polygon[1]).to eq(linear_ring2)
70
70
  end
71
71
 
72
- it "bbox" do
73
- bbox = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3,15.2],[45.4,41.6,2.4],[4.456,1.0698,5.6],[12.4,-45.3,6.1]],[[2.4,5.3,4.5],[5.4,1.4263,4.2],[14.46,1.06,123.1],[2.4,5.3,4.4]]],256,true).bounding_box
72
+ it 'bbox' do
73
+ bbox = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3, 15.2], [45.4, 41.6, 2.4], [4.456, 1.0698, 5.6], [12.4, -45.3, 6.1]], [[2.4, 5.3, 4.5], [5.4, 1.4263, 4.2], [14.46, 1.06, 123.1], [2.4, 5.3, 4.4]]], 256, true).bounding_box
74
74
  expect(bbox.length).to eql(2)
75
- expect(bbox[0]).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z(4.456,-45.3,2.4))
76
- expect(bbox[1]).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z(45.4,41.6,123.1))
75
+ expect(bbox[0]).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z(4.456, -45.3, 2.4))
76
+ expect(bbox[1]).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z(45.4, 41.6, 123.1))
77
77
  end
78
78
 
79
+ it 'test_polygon_equal' do
80
+ polygon1 = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], [[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06], [2.4, 5.3]]], 256)
81
+ polygon2 = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], [[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06]]])
82
+ point = GeoRuby::SimpleFeatures::Point.from_x_y(12.4, -45.3, 123)
79
83
 
80
- it "test_polygon_equal" do
81
- polygon1 = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256)
82
- polygon2 = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06]]])
83
- point = GeoRuby::SimpleFeatures::Point.from_x_y(12.4,-45.3,123)
84
-
85
- expect(polygon1).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256))
84
+ expect(polygon1).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], [[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06], [2.4, 5.3]]], 256))
86
85
  expect(polygon1).not_to eq(polygon2)
87
86
  expect(polygon1).not_to eq(point)
88
87
  end
89
88
 
90
- it "test_polygon_binary" do
91
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256)
92
- #taken from PostGIS answer
93
- expect(polygon.as_hex_ewkb).to eql("0103000020000100000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F0000000000000840000000000000F03F00000000000008400000000000000840000000000000F03F0000000000000840000000000000F03F000000000000F03F")
89
+ it 'test_polygon_binary' do
90
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [4, 0], [4, 4], [0, 4], [0, 0]], [[1, 1], [3, 1], [3, 3], [1, 3], [1, 1]]], 256)
91
+ # taken from PostGIS answer
92
+ expect(polygon.as_hex_ewkb).to eql('0103000020000100000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F0000000000000840000000000000F03F00000000000008400000000000000840000000000000F03F0000000000000840000000000000F03F000000000000F03F')
94
93
 
95
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,true)
96
- #taken from PostGIS answer
97
- expect(polygon.as_hex_ewkb).to eql("01030000A000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040")
94
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, true)
95
+ # taken from PostGIS answer
96
+ expect(polygon.as_hex_ewkb).to eql('01030000A000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040')
98
97
 
99
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,false,true)
100
- expect(polygon.as_hex_ewkb).to eql("010300006000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040")
98
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, false, true)
99
+ expect(polygon.as_hex_ewkb).to eql('010300006000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040')
101
100
 
102
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2,-45.1],[4,0,2,5],[4,4,2,4.67],[0,4,2,1.34],[0,0,2,-45.1]],[[1,1,2,12.3],[3,1,2,123],[3,3,2,12.2],[1,3,2,12],[1,1,2,12.3]]],256,true,true)
103
- expect(polygon.as_hex_ewkb).to eql("01030000E0000100000200000005000000000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C00000000000001040000000000000000000000000000000400000000000001440000000000000104000000000000010400000000000000040AE47E17A14AE1240000000000000000000000000000010400000000000000040713D0AD7A370F53F000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C005000000000000000000F03F000000000000F03F00000000000000409A999999999928400000000000000840000000000000F03F00000000000000400000000000C05E400000000000000840000000000000084000000000000000406666666666662840000000000000F03F000000000000084000000000000000400000000000002840000000000000F03F000000000000F03F00000000000000409A99999999992840")
101
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2, -45.1], [4, 0, 2, 5], [4, 4, 2, 4.67], [0, 4, 2, 1.34], [0, 0, 2, -45.1]], [[1, 1, 2, 12.3], [3, 1, 2, 123], [3, 3, 2, 12.2], [1, 3, 2, 12], [1, 1, 2, 12.3]]], 256, true, true)
102
+ expect(polygon.as_hex_ewkb).to eql('01030000E0000100000200000005000000000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C00000000000001040000000000000000000000000000000400000000000001440000000000000104000000000000010400000000000000040AE47E17A14AE1240000000000000000000000000000010400000000000000040713D0AD7A370F53F000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C005000000000000000000F03F000000000000F03F00000000000000409A999999999928400000000000000840000000000000F03F00000000000000400000000000C05E400000000000000840000000000000084000000000000000406666666666662840000000000000F03F000000000000084000000000000000400000000000002840000000000000F03F000000000000F03F00000000000000409A99999999992840')
104
103
  end
105
104
 
106
- it "should test_polygon_text" do
107
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256)
108
- expect(polygon.as_ewkt).to eql("SRID=256;POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,3 1,3 3,1 3,1 1))")
105
+ it 'should test_polygon_text' do
106
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [4, 0], [4, 4], [0, 4], [0, 0]], [[1, 1], [3, 1], [3, 3], [1, 3], [1, 1]]], 256)
107
+ expect(polygon.as_ewkt).to eql('SRID=256;POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1,3 1,3 3,1 3,1 1))')
109
108
 
110
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,true)
111
- expect(polygon.as_ewkt).to eql("SRID=256;POLYGON((0 0 2,4 0 2,4 4 2,0 4 2,0 0 2),(1 1 2,3 1 2,3 3 2,1 3 2,1 1 2))")
109
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, true)
110
+ expect(polygon.as_ewkt).to eql('SRID=256;POLYGON((0 0 2,4 0 2,4 4 2,0 4 2,0 0 2),(1 1 2,3 1 2,3 3 2,1 3 2,1 1 2))')
112
111
 
113
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,false,true)
114
- expect(polygon.as_ewkt).to eql("SRID=256;POLYGONM((0 0 2,4 0 2,4 4 2,0 4 2,0 0 2),(1 1 2,3 1 2,3 3 2,1 3 2,1 1 2))")
112
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, false, true)
113
+ expect(polygon.as_ewkt).to eql('SRID=256;POLYGONM((0 0 2,4 0 2,4 4 2,0 4 2,0 0 2),(1 1 2,3 1 2,3 3 2,1 3 2,1 1 2))')
115
114
 
116
- polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2,-45.1],[4,0,2,5],[4,4,2,4.67],[0,4,2,1.34],[0,0,2,-45.1]],[[1,1,2,12.3],[3,1,2,123],[3,3,2,12.2],[1,3,2,12],[1,1,2,12.3]]],256,true,true)
117
- expect(polygon.as_ewkt).to eql("SRID=256;POLYGON((0 0 2 -45.1,4 0 2 5,4 4 2 4.67,0 4 2 1.34,0 0 2 -45.1),(1 1 2 12.3,3 1 2 123,3 3 2 12.2,1 3 2 12,1 1 2 12.3))")
115
+ polygon = GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2, -45.1], [4, 0, 2, 5], [4, 4, 2, 4.67], [0, 4, 2, 1.34], [0, 0, 2, -45.1]], [[1, 1, 2, 12.3], [3, 1, 2, 123], [3, 3, 2, 12.2], [1, 3, 2, 12], [1, 1, 2, 12.3]]], 256, true, true)
116
+ expect(polygon.as_ewkt).to eql('SRID=256;POLYGON((0 0 2 -45.1,4 0 2 5,4 4 2 4.67,0 4 2 1.34,0 0 2 -45.1),(1 1 2 12.3,3 1 2 123,3 3 2 12.2,1 3 2 12,1 1 2 12.3))')
118
117
  end
119
118
 
120
119
  end
@@ -3,18 +3,18 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
  # Time to add your specs!
4
4
  # http://rspec.info/
5
5
  describe GeoRuby do
6
-
7
- it "should instantiate Geometry" do
6
+
7
+ it 'should instantiate Geometry' do
8
8
  @geo = GeoRuby::SimpleFeatures::Geometry.new
9
9
  expect(@geo.class).to eql(::GeoRuby::SimpleFeatures::Geometry)
10
10
  end
11
11
 
12
- it "should instantiate Point" do
12
+ it 'should instantiate Point' do
13
13
  @point = GeoRuby::SimpleFeatures::Point.new
14
14
  expect(@point).to be_instance_of(::GeoRuby::SimpleFeatures::Point)
15
15
  end
16
16
 
17
- it "should instantiate Line" do
17
+ it 'should instantiate Line' do
18
18
  @line = GeoRuby::SimpleFeatures::LineString.new
19
19
  expect(@line).to be_instance_of(::GeoRuby::SimpleFeatures::LineString)
20
20
  end
@@ -3,38 +3,39 @@ require 'rubygems'
3
3
  # Must require active_spport/core_ext/object and then json/pure
4
4
  # or the json module gets clobbered and geojson output
5
5
  # becomes invalid... ie. it never calls class specific to_json
6
- #require 'active_support/core_ext/object'
7
- #require 'json/pure'
6
+ # require 'active_support/core_ext/object'
7
+ # require 'json/pure'
8
8
 
9
9
  require 'rspec'
10
10
 
11
11
  require 'geo_ruby'
12
+ require 'geo_ruby/ewk'
12
13
  require 'geo_ruby/shp'
13
14
  require 'geo_ruby/gpx'
14
- require 'geo_ruby/geojson'
15
- require 'geo_ruby/georss'
16
15
  require 'geo_ruby/kml'
16
+ require 'geo_ruby/georss'
17
+ require 'geo_ruby/geojson'
17
18
 
18
- if ENV["CI"]
19
+ if ENV['CI']
19
20
  require 'coveralls'
20
21
  Coveralls.wear!
21
22
  end
22
23
 
23
24
  module GeorubyMatchers
24
-
25
25
  class BeGeometric
26
-
27
26
  def matches?(actual)
28
- actual.ancestors.include?(actual) || actual.kind_of?("Geometry")
27
+ actual.ancestors.include?(actual) || actual.is_a?('Geometry')
29
28
  end
30
29
 
31
- def failure_message; "expected #{@actual.inspect} to be some geom"; end
30
+ def failure_message
31
+ "expected #{@actual.inspect} to be some geom"
32
+ end
32
33
  end
33
34
 
34
35
  class BeAPoint
35
36
  include RSpec::Matchers
36
37
 
37
- def initialize(expect=nil)
38
+ def initialize(expect = nil)
38
39
  @expect = expect
39
40
  end
40
41
 
@@ -42,7 +43,7 @@ module GeorubyMatchers
42
43
  if @expect
43
44
  [:x, :y, :z, :m].each_with_index do |c, i|
44
45
  next unless val = @expect[i]
45
- if val.kind_of? Numeric
46
+ if val.is_a? Numeric
46
47
  expect(actual.send(c)).to be_within(0.1).of(val)
47
48
  else
48
49
  expect(actual.send(c)).to eql(val)
@@ -52,8 +53,13 @@ module GeorubyMatchers
52
53
  expect(actual).to be_instance_of(GeoRuby::SimpleFeatures::Point)
53
54
  end
54
55
 
55
- def failure_message; "expected #{@expect} but received #{@actual.inspect}"; end
56
- def failure_message_when_negated; "expected something else then '#{@expect}' but got '#{@actual}'"; end
56
+ def failure_message
57
+ "expected #{@expect} but received #{@actual.inspect}"
58
+ end
59
+
60
+ def failure_message_when_negated
61
+ "expected something else then '#{@expect}' but got '#{@actual}'"
62
+ end
57
63
  end
58
64
 
59
65
  def be_a_point(*args)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: georuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilhem Vellut
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-09-20 00:00:00.000000000 Z
14
+ date: 2014-12-06 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description: GeoRuby provides geometric data types from the OGC 'Simple Features'
17
17
  specification.
@@ -23,10 +23,12 @@ files:
23
23
  - README.md
24
24
  - Rakefile
25
25
  - lib/geo_ruby.rb
26
+ - lib/geo_ruby/ewk.rb
27
+ - lib/geo_ruby/ewk/ewkb_parser.rb
28
+ - lib/geo_ruby/ewk/ewkt_parser.rb
26
29
  - lib/geo_ruby/geojson.rb
27
30
  - lib/geo_ruby/georss.rb
28
31
  - lib/geo_ruby/gpx.rb
29
- - lib/geo_ruby/gpx4r/gpx.rb
30
32
  - lib/geo_ruby/kml.rb
31
33
  - lib/geo_ruby/shp.rb
32
34
  - lib/geo_ruby/shp4r/dbf.rb
@@ -34,8 +36,6 @@ files:
34
36
  - lib/geo_ruby/simple_features.rb
35
37
  - lib/geo_ruby/simple_features/circle.rb
36
38
  - lib/geo_ruby/simple_features/envelope.rb
37
- - lib/geo_ruby/simple_features/ewkb_parser.rb
38
- - lib/geo_ruby/simple_features/ewkt_parser.rb
39
39
  - lib/geo_ruby/simple_features/geometry.rb
40
40
  - lib/geo_ruby/simple_features/geometry_collection.rb
41
41
  - lib/geo_ruby/simple_features/geometry_factory.rb
@@ -49,6 +49,7 @@ files:
49
49
  - lib/geo_ruby/simple_features/polygon.rb
50
50
  - lib/geo_ruby/version.rb
51
51
  - lib/georuby.rb
52
+ - spec/data/geojson/feature.json
52
53
  - spec/data/geojson/feature_collection.json
53
54
  - spec/data/georss/atom.xml
54
55
  - spec/data/georss/gml.xml
@@ -72,15 +73,15 @@ files:
72
73
  - spec/data/polyline.dbf
73
74
  - spec/data/polyline.shp
74
75
  - spec/data/polyline.shx
76
+ - spec/geo_ruby/ewk/ewkb_parser_spec.rb
77
+ - spec/geo_ruby/ewk/ewkt_parser_spec.rb
75
78
  - spec/geo_ruby/geojson_spec.rb
76
79
  - spec/geo_ruby/georss_spec.rb
77
- - spec/geo_ruby/gpx4r/gpx_spec.rb
80
+ - spec/geo_ruby/gpx_spec.rb
78
81
  - spec/geo_ruby/kml_spec.rb
79
82
  - spec/geo_ruby/shp4r/shp_spec.rb
80
83
  - spec/geo_ruby/simple_features/circle_spec.rb
81
84
  - spec/geo_ruby/simple_features/envelope_spec.rb
82
- - spec/geo_ruby/simple_features/ewkb_parser_spec.rb
83
- - spec/geo_ruby/simple_features/ewkt_parser_spec.rb
84
85
  - spec/geo_ruby/simple_features/geometry_collection_spec.rb
85
86
  - spec/geo_ruby/simple_features/geometry_factory_spec.rb
86
87
  - spec/geo_ruby/simple_features/geometry_spec.rb
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  version: '0'
114
115
  requirements: []
115
116
  rubyforge_project:
116
- rubygems_version: 2.2.2
117
+ rubygems_version: 2.4.3
117
118
  signing_key:
118
119
  specification_version: 4
119
120
  summary: Ruby data holder for OGC Simple Features
@@ -1,118 +0,0 @@
1
- require "rubygems"
2
- require "nokogiri"
3
-
4
- module GeoRuby
5
- module Gpx4r
6
-
7
- #An interface to GPX files
8
- class GpxFile
9
- attr_reader :record_count, :file_root #:xmin, :ymin, :xmax, :ymax, :zmin, :zmax, :mmin, :mmax, :file_length
10
-
11
- include Enumerable
12
-
13
- # Opens a GPX file. Both "abc.shp" and "abc" are accepted.
14
- def initialize(file, *opts) #with_z = true, with_m = true)
15
- @file_root = file.gsub(/\.gpx$/i,"")
16
- raise MalformedGpxException.new("Missing GPX File") unless
17
- File.exists? @file_root + ".gpx"
18
- @points, @envelope = [], nil
19
- @gpx = File.open(@file_root + ".gpx", "rb")
20
- opt = opts.inject({}) { |o, h| h.merge(o) }
21
- parse_file(opt[:with_z], opt[:with_m])
22
- end
23
-
24
- #force the reopening of the files compsing the shp. Close before calling this.
25
- def reload!
26
- initialize(@file_root)
27
- end
28
-
29
- #opens a GPX "file". If a block is given, the GpxFile object is yielded to it and is closed upon return. Else a call to <tt>open</tt> is equivalent to <tt>GpxFile.new(...)</tt>.
30
- def self.open(file, *opts)
31
- gpxfile = GpxFile.new(file, *opts)
32
- if block_given?
33
- yield gpxfile
34
- # gpxfile.close
35
- else
36
- gpxfile
37
- end
38
- end
39
-
40
- #Closes a gpxfile
41
- def close
42
- @gpx.close
43
- end
44
-
45
- #Tests if the file has no record
46
- def empty?
47
- record_count == 0
48
- end
49
-
50
- #Goes through each record
51
- def each
52
- (0...record_count).each do |i|
53
- yield get_record(i)
54
- end
55
- end
56
- alias :each_record :each
57
-
58
- #Returns record +i+
59
- def [](i)
60
- get_record(i)
61
- end
62
-
63
- #Returns all the records
64
- def records
65
- @points
66
- end
67
-
68
- # Return the GPX file as LineString
69
- def as_line_string
70
- GeoRuby::SimpleFeatures::LineString.from_points(@points)
71
- end
72
- alias :as_polyline :as_line_string
73
-
74
- # Return the GPX file as a Polygon
75
- # If the GPX isn't closed, a line from the first
76
- # to the last point will be created to close it.
77
- def as_polygon
78
- GeoRuby::SimpleFeatures::Polygon.from_points([@points[0] == @points[-1] ? @points : @points.push(@points[0].clone)])
79
- end
80
-
81
- # Return GPX Envelope
82
- def envelope
83
- @envelope ||= as_polygon.envelope
84
- end
85
-
86
- private
87
-
88
- def get_record(i)
89
- @points[i]
90
- end
91
-
92
- # wpt => waypoint => TODO?
93
- # rte(pt) => route
94
- # trk(pt) => track /
95
- def parse_file(with_z, with_m)
96
- data = @gpx.read
97
- @file_mode = data =~ /trkpt/ ? "//trkpt" : (data =~ /wpt/ ? "//wpt" : "//rtept")
98
- Nokogiri.HTML(data).search(@file_mode).each do |tp|
99
- z = z.inner_text.to_f if with_z && z = tp.at("ele")
100
- m = m.inner_text if with_m && m = tp.at("time")
101
- @points << GeoRuby::SimpleFeatures::Point.from_coordinates([tp["lon"].to_f, tp["lat"].to_f, z, m],4326,with_z, with_m)
102
- end
103
- close
104
- @record_count = @points.length
105
- self.envelope
106
- rescue => e
107
- raise MalformedGpxException.new("Bad GPX. Error: #{e}")
108
- # trackpoint.at("gpxdata:hr").nil? # heartrate
109
- end
110
-
111
- end
112
-
113
- class MalformedGpxException < StandardError
114
- end
115
-
116
- end
117
-
118
- end