georuby 2.3.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -9
- data/Rakefile +13 -14
- data/lib/geo_ruby/ewk.rb +2 -0
- data/lib/geo_ruby/{simple_features → ewk}/ewkb_parser.rb +206 -218
- data/lib/geo_ruby/ewk/ewkt_parser.rb +321 -0
- data/lib/geo_ruby/geojson.rb +27 -32
- data/lib/geo_ruby/georss.rb +88 -66
- data/lib/geo_ruby/gpx.rb +113 -1
- data/lib/geo_ruby/kml.rb +43 -31
- data/lib/geo_ruby/shp.rb +1 -0
- data/lib/geo_ruby/shp4r/dbf.rb +7 -3
- data/lib/geo_ruby/shp4r/shp.rb +297 -284
- data/lib/geo_ruby/simple_features.rb +2 -6
- data/lib/geo_ruby/simple_features/circle.rb +15 -13
- data/lib/geo_ruby/simple_features/envelope.rb +84 -77
- data/lib/geo_ruby/simple_features/geometry.rb +89 -69
- data/lib/geo_ruby/simple_features/geometry_collection.rb +46 -43
- data/lib/geo_ruby/simple_features/geometry_factory.rb +50 -47
- data/lib/geo_ruby/simple_features/helper.rb +14 -14
- data/lib/geo_ruby/simple_features/line_string.rb +94 -97
- data/lib/geo_ruby/simple_features/linear_ring.rb +4 -9
- data/lib/geo_ruby/simple_features/multi_line_string.rb +18 -21
- data/lib/geo_ruby/simple_features/multi_point.rb +18 -20
- data/lib/geo_ruby/simple_features/multi_polygon.rb +19 -25
- data/lib/geo_ruby/simple_features/point.rb +134 -128
- data/lib/geo_ruby/simple_features/polygon.rb +60 -59
- data/lib/geo_ruby/version.rb +1 -1
- data/spec/data/geojson/feature.json +9 -0
- data/spec/data/geojson/feature_collection.json +3 -4
- data/spec/geo_ruby/{simple_features → ewk}/ewkb_parser_spec.rb +56 -57
- data/spec/geo_ruby/{simple_features → ewk}/ewkt_parser_spec.rb +62 -63
- data/spec/geo_ruby/geojson_spec.rb +34 -17
- data/spec/geo_ruby/georss_spec.rb +76 -64
- data/spec/geo_ruby/{gpx4r/gpx_spec.rb → gpx_spec.rb} +25 -25
- data/spec/geo_ruby/kml_spec.rb +40 -36
- data/spec/geo_ruby/shp4r/shp_spec.rb +51 -51
- data/spec/geo_ruby/simple_features/circle_spec.rb +2 -2
- data/spec/geo_ruby/simple_features/envelope_spec.rb +8 -8
- data/spec/geo_ruby/simple_features/geometry_collection_spec.rb +26 -26
- data/spec/geo_ruby/simple_features/geometry_factory_spec.rb +5 -5
- data/spec/geo_ruby/simple_features/geometry_spec.rb +8 -8
- data/spec/geo_ruby/simple_features/line_string_spec.rb +102 -102
- data/spec/geo_ruby/simple_features/linear_ring_spec.rb +7 -7
- data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +20 -20
- data/spec/geo_ruby/simple_features/multi_point_spec.rb +16 -16
- data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +19 -19
- data/spec/geo_ruby/simple_features/point_spec.rb +180 -174
- data/spec/geo_ruby/simple_features/polygon_spec.rb +55 -56
- data/spec/geo_ruby_spec.rb +4 -4
- data/spec/spec_helper.rb +19 -13
- metadata +10 -9
- data/lib/geo_ruby/gpx4r/gpx.rb +0 -118
- data/lib/geo_ruby/simple_features/ewkt_parser.rb +0 -336
@@ -1,87 +1,87 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe GeoRuby::Gpx4r do
|
4
4
|
|
5
5
|
it "should add gpx extension and raise if doesn't exists" do
|
6
6
|
expect do
|
7
|
-
expect(File).to receive(:
|
7
|
+
expect(File).to receive(:exist?).with('short.gpx').and_return(false)
|
8
8
|
expect(GeoRuby::Gpx4r::GpxFile.open('short')).to be_truthy
|
9
9
|
end.to raise_error GeoRuby::Gpx4r::MalformedGpxException
|
10
10
|
end
|
11
11
|
|
12
|
-
describe
|
12
|
+
describe 'Waypoints' do
|
13
13
|
|
14
14
|
before(:all) do
|
15
|
-
@gpxfile = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '
|
16
|
-
@gpxfile2 = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '
|
17
|
-
@gpxfile3 = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '
|
15
|
+
@gpxfile = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '/../data/gpx/short.gpx', with_z: true, with_m: true)
|
16
|
+
@gpxfile2 = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '/../data/gpx/fells_loop', with_z: true, with_m: true)
|
17
|
+
@gpxfile3 = GeoRuby::Gpx4r::GpxFile.open(File.dirname(__FILE__) + '/../data/gpx/tracktreks.gpx', with_z: true)
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it 'should open and parse' do
|
21
21
|
expect(@gpxfile.record_count).to eql(2724)
|
22
22
|
end
|
23
23
|
|
24
|
-
it
|
24
|
+
it 'should open and parse no trkpt one' do
|
25
25
|
expect(@gpxfile2.record_count).to eql(86)
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
28
|
+
it 'should open and parse 3' do
|
29
29
|
expect(@gpxfile3.record_count).to eql(225)
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'should read X and Y' do
|
33
33
|
expect(@gpxfile[0].x).to be_within(0.0001).of(9.093942)
|
34
34
|
expect(@gpxfile[0].y).to be_within(0.0001).of(48.731813)
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it 'should read Z and M' do
|
38
38
|
expect(@gpxfile[0].z).to eql(468.0)
|
39
|
-
expect(@gpxfile[0].m).to eql(
|
39
|
+
expect(@gpxfile[0].m).to eql('2008-09-07T17:36:57Z')
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
42
|
+
it 'should read X and Y 2' do
|
43
43
|
expect(@gpxfile2[0].x).to be_within(0.0001).of(-71.119277)
|
44
44
|
expect(@gpxfile2[0].y).to be_within(0.0001).of(42.438878)
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
47
|
+
it 'should read Z and M 2' do
|
48
48
|
expect(@gpxfile2[0].z).to eql(44.586548)
|
49
|
-
expect(@gpxfile2[0].m).to eql(
|
49
|
+
expect(@gpxfile2[0].m).to eql('2001-11-28T21:05:28Z')
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
52
|
+
it 'should read X and Y 3' do
|
53
53
|
expect(@gpxfile3[0].x).to be_within(0.0001).of(-149.8358011)
|
54
54
|
expect(@gpxfile3[0].y).to be_within(0.0001).of(-17.5326508)
|
55
55
|
end
|
56
56
|
|
57
|
-
it
|
57
|
+
it 'should read Z and M 3' do
|
58
58
|
expect(@gpxfile3[0].z).to eql(88.5787354)
|
59
59
|
expect(@gpxfile3[0].m).to eql(0.0)
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
62
|
+
it 'should return it as a linestring' do
|
63
63
|
expect(@gpxfile.as_line_string).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
64
64
|
expect(@gpxfile.as_polyline).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
67
|
+
it 'should return it as a linestring 3' do
|
68
68
|
expect(@gpxfile3.as_line_string).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
69
69
|
expect(@gpxfile3.as_polyline).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
72
|
+
it 'should return a envelope' do
|
73
73
|
expect(@gpxfile.envelope).to be_instance_of GeoRuby::SimpleFeatures::Envelope
|
74
74
|
expect(@gpxfile.envelope.lower_corner.x).to be_within(0.001).of(9.08128)
|
75
75
|
expect(@gpxfile.envelope.lower_corner.y).to be_within(0.001).of(48.7169)
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
78
|
+
it 'should return a envelope 3' do
|
79
79
|
expect(@gpxfile3.envelope).to be_instance_of GeoRuby::SimpleFeatures::Envelope
|
80
80
|
expect(@gpxfile3.envelope.lower_corner.x).to be_within(0.001).of(-149.8422613)
|
81
81
|
expect(@gpxfile3.envelope.lower_corner.y).to be_within(0.001).of(-17.547636)
|
82
82
|
end
|
83
83
|
|
84
|
-
it
|
84
|
+
it 'should return it as a polygon' do
|
85
85
|
[@gpxfile, @gpxfile2, @gpxfile3].each do |g|
|
86
86
|
expect(g.as_polygon).to be_instance_of GeoRuby::SimpleFeatures::Polygon
|
87
87
|
expect(g.as_polygon[0]).to be_instance_of GeoRuby::SimpleFeatures::LinearRing
|
@@ -90,13 +90,13 @@ describe GeoRuby::Gpx4r do
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
it
|
93
|
+
it 'should close the polygon' do
|
94
94
|
se = GeoRuby::SimpleFeatures::Point.from_x_y(-44, -23)
|
95
95
|
sw = GeoRuby::SimpleFeatures::Point.from_x_y(-42, -22)
|
96
96
|
nw = GeoRuby::SimpleFeatures::Point.from_x_y(-42, -25)
|
97
97
|
ne = GeoRuby::SimpleFeatures::Point.from_x_y(-44, -21)
|
98
|
-
@gpxfile.instance_variable_set(:@points, [se,sw,nw,ne])
|
99
|
-
expect(@gpxfile.as_polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_points([[se,sw,nw,ne,se]]))
|
98
|
+
@gpxfile.instance_variable_set(:@points, [se, sw, nw, ne])
|
99
|
+
expect(@gpxfile.as_polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_points([[se, sw, nw, ne, se]]))
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
data/spec/geo_ruby/kml_spec.rb
CHANGED
@@ -2,97 +2,101 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe GeoRuby::KmlParser do
|
4
4
|
before(:all) do
|
5
|
-
POINT =
|
6
|
-
LINESTRING =
|
7
|
-
LINEARRING =
|
8
|
-
POLYGON =
|
9
|
-
COMPLEX_POLYGON =
|
10
|
-
MULTIGEOMETRY =
|
11
|
-
POINT3D =
|
12
|
-
LINESTRING3D =
|
5
|
+
POINT = '<Point><coordinates>-82.4898187291883,34.2473206042649</coordinates></Point>'
|
6
|
+
LINESTRING = '<LineString><coordinates>-122.365662,37.826988 -122.365202,37.826302 -122.364581,37.82655 -122.365038,37.827237</coordinates></LineString>'
|
7
|
+
LINEARRING = '<LinearRing><coordinates>-122.365662,37.826988 -122.365202,37.826302 -122.364581,37.82655 -122.365038,37.827237 -122.365662,37.826988</coordinates></LinearRing>'
|
8
|
+
POLYGON = '<Polygon><outerBoundaryIs><LinearRing><coordinates>-82.5961385808407,34.0134202383713 -82.6029437979289,34.0346366848087 -82.6603553035687,34.1083560439036 -82.7357807829899,34.1697961502507 -82.7425935601244,34.2055536194311 -82.3145921793097,34.4812209701586 -82.2758648198483,34.4347213073308 -82.2405017851073,34.4067761024174 -82.3327002190662,34.3417863447576 -82.2910826671599,34.2708004396966 -82.2497468801283,34.2261551348023 -82.2370438982521,34.1709424545969 -82.2569955519648,34.1119142196088 -82.3237086862075,34.0601294413679 -82.368425596693,34.0533120146082 -82.4455985300521,34.0562556252352 -82.4806178108032,34.0759686807282 -82.5334224196077,34.0620944842448 -82.5961385808407,34.0134202383713</coordinates></LinearRing></outerBoundaryIs></Polygon>'
|
9
|
+
COMPLEX_POLYGON = '<Polygon><outerBoundaryIs><LinearRing><coordinates>-122.366278,37.818844 -122.365248,37.819267 -122.36564,37.819861 -122.366669,37.819429 -122.366278,37.818844</coordinates></LinearRing></outerBoundaryIs><innerBoundaryIs><LinearRing><coordinates>-122.366212,37.818977 -122.365424,37.819294 -122.365704,37.819731 -122.366488,37.819402 -122.366212,37.818977</coordinates></LinearRing></innerBoundaryIs></Polygon>'
|
10
|
+
MULTIGEOMETRY = '<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>-82.5961385808407,34.0134202383713 -82.6029437979289,34.0346366848087 -82.6603553035687,34.1083560439036 -82.7357807829899,34.1697961502507 -82.7425935601244,34.2055536194311 -82.3145921793097,34.4812209701586 -82.2758648198483,34.4347213073308 -82.2405017851073,34.4067761024174 -82.3327002190662,34.3417863447576 -82.2910826671599,34.2708004396966 -82.2497468801283,34.2261551348023 -82.2370438982521,34.1709424545969 -82.2569955519648,34.1119142196088 -82.3237086862075,34.0601294413679 -82.368425596693,34.0533120146082 -82.4455985300521,34.0562556252352 -82.4806178108032,34.0759686807282 -82.5334224196077,34.0620944842448 -82.5961385808407,34.0134202383713</coordinates></LinearRing></outerBoundaryIs></Polygon><Point><coordinates>-82.4898187291883,34.2473206042649</coordinates></Point></MultiGeometry>'
|
11
|
+
POINT3D = '<Point><coordinates>-82.4898187291883,34.2473206042649,5</coordinates></Point>'
|
12
|
+
LINESTRING3D = '<LineString><coordinates>-122.365662,37.826988,1 -122.365202,37.826302,2 -122.364581,37.82655,3 -122.365038,37.827237,4</coordinates></LineString>'
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
before(:each) do
|
16
16
|
@factory = GeoRuby::SimpleFeatures::GeometryFactory.new
|
17
17
|
@kml_parser = described_class.new(@factory)
|
18
18
|
end
|
19
|
-
|
20
|
-
it
|
19
|
+
|
20
|
+
it 'should parse a GeoRuby::SimpleFeatures::Point correctly' do
|
21
21
|
@kml_parser.parse(POINT)
|
22
22
|
g = @factory.geometry
|
23
23
|
expect(g).not_to eql(nil)
|
24
24
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::Point)
|
25
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(POINT)
|
25
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(POINT)
|
26
26
|
end
|
27
|
-
|
28
|
-
it
|
27
|
+
|
28
|
+
it 'should parse a GeoRuby::SimpleFeatures::LineString correctly' do
|
29
29
|
@kml_parser.parse(LINESTRING)
|
30
30
|
g = @factory.geometry
|
31
31
|
expect(g).not_to eql(nil)
|
32
32
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::LineString)
|
33
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(LINESTRING)
|
33
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(LINESTRING)
|
34
34
|
|
35
35
|
@kml_parser.parse(LINEARRING)
|
36
36
|
g = @factory.geometry
|
37
37
|
expect(g).not_to eql(nil)
|
38
38
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::LinearRing)
|
39
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(LINEARRING)
|
39
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(LINEARRING)
|
40
40
|
end
|
41
|
-
|
42
|
-
it
|
41
|
+
|
42
|
+
it 'should parse a GeoRuby::SimpleFeatures::Polygon correctly' do
|
43
43
|
@kml_parser.parse(POLYGON)
|
44
44
|
g = @factory.geometry
|
45
45
|
expect(g).not_to eql(nil)
|
46
46
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::Polygon)
|
47
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(POLYGON)
|
47
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(POLYGON)
|
48
48
|
|
49
49
|
@kml_parser.parse(COMPLEX_POLYGON)
|
50
50
|
g = @factory.geometry
|
51
51
|
expect(g).not_to eql(nil)
|
52
52
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::Polygon)
|
53
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(COMPLEX_POLYGON)
|
53
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(COMPLEX_POLYGON)
|
54
54
|
end
|
55
|
-
|
56
|
-
it
|
55
|
+
|
56
|
+
it 'should parse a MultiGeometry correctly' do
|
57
57
|
@kml_parser.parse(MULTIGEOMETRY)
|
58
58
|
g = @factory.geometry
|
59
59
|
expect(g).not_to eql(nil)
|
60
60
|
expect(g.geometries.length).to eql(2)
|
61
61
|
expect(g).to be_an_instance_of(GeoRuby::SimpleFeatures::GeometryCollection)
|
62
|
-
expect(g.as_kml.gsub(/\n/,'')).to eql(MULTIGEOMETRY)
|
62
|
+
expect(g.as_kml.gsub(/\n/, '')).to eql(MULTIGEOMETRY)
|
63
63
|
end
|
64
|
-
|
65
|
-
it
|
66
|
-
# not testing generation because GeoRuby kml generation logic currently
|
67
|
-
# XML nodes to actually output 3D coordinate
|
64
|
+
|
65
|
+
it 'should parse 3D geometries correctly' do
|
66
|
+
# not testing generation because GeoRuby kml generation logic currently
|
67
|
+
# requires additional XML nodes to actually output 3D coordinate
|
68
|
+
# information. I might modify that behavior.
|
68
69
|
g = @kml_parser.parse(POINT3D)
|
69
70
|
expect(g).not_to eql(nil)
|
70
71
|
expect(g.with_z).to eql(true)
|
71
|
-
# g.as_kml(:altitude_mode => "clampToGround").gsub(/\n/,'')
|
72
|
+
# g.as_kml(:altitude_mode => "clampToGround").gsub(/\n/,'')
|
73
|
+
# .should eql(POINT3D)
|
72
74
|
|
73
75
|
g = @kml_parser.parse(LINESTRING3D)
|
74
76
|
expect(g).not_to eql(nil)
|
75
77
|
expect(g.with_z).to eql(true)
|
76
|
-
# g.as_kml(:altitude_mode => "clampToGround").gsub(/\n/,'')
|
78
|
+
# g.as_kml(:altitude_mode => "clampToGround").gsub(/\n/,'')
|
79
|
+
# .should eql(LINESTRING3D)
|
77
80
|
end
|
78
81
|
|
79
|
-
it
|
80
|
-
[LINESTRING, LINEARRING, POLYGON, COMPLEX_POLYGON,
|
82
|
+
it 'should yield a geometries with functional bounding boxes' do
|
83
|
+
[LINESTRING, LINEARRING, POLYGON, COMPLEX_POLYGON,
|
84
|
+
MULTIGEOMETRY, LINESTRING3D].each do |kml|
|
81
85
|
@kml_parser.parse(kml)
|
82
86
|
g = @factory.geometry
|
83
|
-
expect
|
87
|
+
expect do
|
84
88
|
g.bounding_box
|
85
|
-
|
89
|
+
end.not_to raise_error
|
86
90
|
end
|
87
91
|
end
|
88
92
|
|
89
|
-
it
|
93
|
+
it 'should yield a geometries with functional envelopes' do
|
90
94
|
[LINESTRING, LINEARRING, POLYGON, COMPLEX_POLYGON, MULTIGEOMETRY, LINESTRING3D].each do |kml|
|
91
95
|
@kml_parser.parse(kml)
|
92
96
|
g = @factory.geometry
|
93
|
-
expect
|
97
|
+
expect do
|
94
98
|
g.envelope.center
|
95
|
-
|
99
|
+
end.not_to raise_error
|
96
100
|
end
|
97
101
|
end
|
98
102
|
end
|
@@ -2,119 +2,119 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
3
3
|
describe GeoRuby::Shp4r do
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe 'Point' do
|
6
6
|
before(:each) do
|
7
7
|
@shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/point.shp')
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
10
|
+
it 'should parse ok' do
|
11
11
|
expect(@shpfile.record_count).to eql(2)
|
12
12
|
expect(@shpfile.fields.size).to eq(1)
|
13
13
|
expect(@shpfile.shp_type).to eql(GeoRuby::Shp4r::ShpType::POINT)
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'should parse fields' do
|
17
17
|
field = @shpfile.fields.first
|
18
|
-
expect(field.name).to eql(
|
19
|
-
expect(field.type).to eql(
|
18
|
+
expect(field.name).to eql('Hoyoyo')
|
19
|
+
expect(field.type).to eql('N')
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
22
|
+
it 'should parse record 1' do
|
23
23
|
rec = @shpfile[0]
|
24
24
|
expect(rec.geometry).to be_kind_of GeoRuby::SimpleFeatures::Point
|
25
25
|
expect(rec.geometry.x).to be_within(0.00001).of(-90.08375)
|
26
26
|
expect(rec.geometry.y).to be_within(0.00001).of(34.39996)
|
27
|
-
expect(rec.data[
|
27
|
+
expect(rec.data['Hoyoyo']).to eql(6)
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
30
|
+
it 'should parse record 2' do
|
31
31
|
rec = @shpfile[1]
|
32
32
|
expect(rec.geometry).to be_kind_of GeoRuby::SimpleFeatures::Point
|
33
33
|
expect(rec.geometry.x).to be_within(0.00001).of(-87.82580)
|
34
34
|
expect(rec.geometry.y).to be_within(0.00001).of(33.36416)
|
35
|
-
expect(rec.data[
|
35
|
+
expect(rec.data['Hoyoyo']).to eql(9)
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
39
39
|
|
40
|
-
describe
|
40
|
+
describe 'Polyline' do
|
41
41
|
before(:each) do
|
42
42
|
@shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/polyline.shp')
|
43
43
|
end
|
44
44
|
|
45
|
-
it
|
45
|
+
it 'should parse ok' do
|
46
46
|
expect(@shpfile.record_count).to eql(1)
|
47
47
|
expect(@shpfile.fields.size).to eq(1)
|
48
48
|
expect(@shpfile.shp_type).to eql(GeoRuby::Shp4r::ShpType::POLYLINE)
|
49
49
|
end
|
50
50
|
|
51
|
-
it
|
51
|
+
it 'should parse fields' do
|
52
52
|
field = @shpfile.fields.first
|
53
|
-
expect(field.name).to eql(
|
53
|
+
expect(field.name).to eql('Chipoto')
|
54
54
|
# GeoRuby::Shp4r::Dbf now uses the decimal to choose between int and float
|
55
55
|
# So here is N instead of F
|
56
|
-
expect(field.type).to eql(
|
56
|
+
expect(field.type).to eql('N')
|
57
57
|
end
|
58
58
|
|
59
|
-
it
|
59
|
+
it 'should parse record 1' do
|
60
60
|
rec = @shpfile[0]
|
61
61
|
expect(rec.geometry).to be_kind_of GeoRuby::SimpleFeatures::MultiLineString
|
62
62
|
expect(rec.geometry.length).to eql(1)
|
63
63
|
expect(rec.geometry[0].length).to eql(6)
|
64
|
-
expect(rec.data[
|
64
|
+
expect(rec.data['Chipoto']).to eql(5.678)
|
65
65
|
end
|
66
66
|
|
67
67
|
end
|
68
68
|
|
69
|
-
describe
|
69
|
+
describe 'Polygon' do
|
70
70
|
before(:each) do
|
71
71
|
@shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/polygon.shp')
|
72
72
|
end
|
73
73
|
|
74
|
-
it
|
74
|
+
it 'should parse ok' do
|
75
75
|
expect(@shpfile.record_count).to eql(1)
|
76
76
|
expect(@shpfile.fields.size).to eq(1)
|
77
77
|
expect(@shpfile.shp_type).to eql(GeoRuby::Shp4r::ShpType::POLYGON)
|
78
78
|
end
|
79
79
|
|
80
|
-
it
|
80
|
+
it 'should parse fields' do
|
81
81
|
field = @shpfile.fields.first
|
82
|
-
expect(field.name).to eql(
|
83
|
-
expect(field.type).to eql(
|
82
|
+
expect(field.name).to eql('Hello')
|
83
|
+
expect(field.type).to eql('C')
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
86
|
+
it 'should parse record 1' do
|
87
87
|
rec = @shpfile[0]
|
88
88
|
expect(rec.geometry).to be_kind_of GeoRuby::SimpleFeatures::MultiPolygon
|
89
89
|
expect(rec.geometry.length).to eql(1)
|
90
90
|
expect(rec.geometry[0].length).to eql(1)
|
91
91
|
expect(rec.geometry[0][0].length).to eql(7)
|
92
|
-
expect(rec.data[
|
92
|
+
expect(rec.data['Hello']).to eql('Bouyoul!')
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
describe
|
97
|
-
def cp_all_shp(file1,file2)
|
98
|
-
FileUtils.copy(file1 +
|
99
|
-
FileUtils.copy(file1 +
|
100
|
-
FileUtils.copy(file1 +
|
96
|
+
describe 'Write' do
|
97
|
+
def cp_all_shp(file1, file2)
|
98
|
+
FileUtils.copy(file1 + '.shp', file2 + '.shp')
|
99
|
+
FileUtils.copy(file1 + '.shx', file2 + '.shx')
|
100
|
+
FileUtils.copy(file1 + '.dbf', file2 + '.dbf')
|
101
101
|
end
|
102
102
|
|
103
103
|
def rm_all_shp(file)
|
104
|
-
FileUtils.rm(file +
|
105
|
-
FileUtils.rm(file +
|
106
|
-
FileUtils.rm(file +
|
104
|
+
FileUtils.rm(file + '.shp')
|
105
|
+
FileUtils.rm(file + '.shx')
|
106
|
+
FileUtils.rm(file + '.dbf')
|
107
107
|
end
|
108
108
|
|
109
|
-
it
|
109
|
+
it 'test_point' do
|
110
110
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/point',
|
111
111
|
File.dirname(__FILE__) + '/../../data/point2')
|
112
112
|
shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/point2.shp')
|
113
113
|
|
114
114
|
shpfile.transaction do |tr|
|
115
115
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
116
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(123.4,123.4),'Hoyoyo' => 5))
|
117
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(-16.67,16.41),'Hoyoyo' => -7))
|
116
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(123.4, 123.4), 'Hoyoyo' => 5))
|
117
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(-16.67, 16.41), 'Hoyoyo' => -7))
|
118
118
|
tr.delete(1)
|
119
119
|
end
|
120
120
|
|
@@ -124,7 +124,7 @@ describe GeoRuby::Shp4r do
|
|
124
124
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/point2')
|
125
125
|
end
|
126
126
|
|
127
|
-
it
|
127
|
+
it 'test_linestring' do
|
128
128
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/polyline',
|
129
129
|
File.dirname(__FILE__) + '/../../data/polyline2')
|
130
130
|
|
@@ -132,8 +132,8 @@ describe GeoRuby::Shp4r do
|
|
132
132
|
|
133
133
|
shpfile.transaction do |tr|
|
134
134
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
135
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::LineString.from_coordinates([[123.4,123.4],[45.6,12.3]]),'Chipoto' => 5.6778))
|
136
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::LineString.from_coordinates([[23.4,13.4],[45.6,12.3],[12
|
135
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::LineString.from_coordinates([[123.4, 123.4], [45.6, 12.3]]), 'Chipoto' => 5.6778))
|
136
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::LineString.from_coordinates([[23.4, 13.4], [45.6, 12.3], [12, -67]]), 'Chipoto' => -7.1))
|
137
137
|
tr.delete(0)
|
138
138
|
end
|
139
139
|
|
@@ -142,7 +142,7 @@ describe GeoRuby::Shp4r do
|
|
142
142
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/polyline2')
|
143
143
|
end
|
144
144
|
|
145
|
-
it
|
145
|
+
it 'test_polygon' do
|
146
146
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/polygon',
|
147
147
|
File.dirname(__FILE__) + '/../../data/polygon2')
|
148
148
|
shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/polygon2.shp')
|
@@ -150,7 +150,7 @@ describe GeoRuby::Shp4r do
|
|
150
150
|
shpfile.transaction do |tr|
|
151
151
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
152
152
|
tr.delete(0)
|
153
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[40,0],[40,40],[0,40],[0,0]],[[10,10],[10,20],[20,20],[10,10]]]),'Hello' =>
|
153
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [40, 0], [40, 40], [0, 40], [0, 0]], [[10, 10], [10, 20], [20, 20], [10, 10]]]), 'Hello' => 'oook'))
|
154
154
|
end
|
155
155
|
|
156
156
|
expect(shpfile.record_count).to eql(1)
|
@@ -159,14 +159,14 @@ describe GeoRuby::Shp4r do
|
|
159
159
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/polygon2')
|
160
160
|
end
|
161
161
|
|
162
|
-
it
|
162
|
+
it 'test_multipoint' do
|
163
163
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/multipoint',
|
164
164
|
File.dirname(__FILE__) + '/../../data/multipoint2')
|
165
165
|
shpfile = GeoRuby::Shp4r::ShpFile.open(File.dirname(__FILE__) + '/../../data/multipoint2.shp')
|
166
166
|
|
167
167
|
shpfile.transaction do |tr|
|
168
168
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
169
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[45.6
|
169
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[45.6, -45.1], [12.4, 98.2], [51.2, -0.12], [156.12345, 56.109]]), 'Hello' => 5, 'Hoyoyo' => 'AEZAE'))
|
170
170
|
end
|
171
171
|
|
172
172
|
expect(shpfile.record_count).to eql(2)
|
@@ -175,7 +175,7 @@ describe GeoRuby::Shp4r do
|
|
175
175
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/multipoint2')
|
176
176
|
end
|
177
177
|
|
178
|
-
it
|
178
|
+
it 'test_multi_polygon' do
|
179
179
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/polygon',
|
180
180
|
File.dirname(__FILE__) + '/../../data/polygon4')
|
181
181
|
|
@@ -183,7 +183,7 @@ describe GeoRuby::Shp4r do
|
|
183
183
|
|
184
184
|
shpfile.transaction do |tr|
|
185
185
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
186
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[40,0],[40,40],[0,40],[0,0]],[[10,10],[10,20],[20,20],[10,10]]])]),'Hello' =>
|
186
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [40, 0], [40, 40], [0, 40], [0, 0]], [[10, 10], [10, 20], [20, 20], [10, 10]]])]), 'Hello' => 'oook'))
|
187
187
|
end
|
188
188
|
|
189
189
|
expect(shpfile.record_count).to eql(2)
|
@@ -193,7 +193,7 @@ describe GeoRuby::Shp4r do
|
|
193
193
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/polygon4')
|
194
194
|
end
|
195
195
|
|
196
|
-
it
|
196
|
+
it 'test_rollback' do
|
197
197
|
cp_all_shp(File.dirname(__FILE__) + '/../../data/polygon',
|
198
198
|
File.dirname(__FILE__) + '/../../data/polygon5')
|
199
199
|
|
@@ -201,7 +201,7 @@ describe GeoRuby::Shp4r do
|
|
201
201
|
|
202
202
|
shpfile.transaction do |tr|
|
203
203
|
expect(tr).to be_instance_of GeoRuby::Shp4r::ShpTransaction
|
204
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[40,0],[40,40],[0,40],[0,0]],[[10,10],[10,20],[20,20],[10,10]]])]),'Hello' =>
|
204
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [40, 0], [40, 40], [0, 40], [0, 0]], [[10, 10], [10, 20], [20, 20], [10, 10]]])]), 'Hello' => 'oook'))
|
205
205
|
tr.rollback
|
206
206
|
end
|
207
207
|
expect(shpfile.record_count).to eql(1)
|
@@ -212,20 +212,20 @@ describe GeoRuby::Shp4r do
|
|
212
212
|
|
213
213
|
end
|
214
214
|
|
215
|
-
it
|
216
|
-
shpfile = GeoRuby::Shp4r::ShpFile.create(File.dirname(__FILE__) + '/../../data/point3.shp',GeoRuby::Shp4r::ShpType::POINT,[GeoRuby::Shp4r::Dbf::Field.new(
|
215
|
+
it 'test_creation' do
|
216
|
+
shpfile = GeoRuby::Shp4r::ShpFile.create(File.dirname(__FILE__) + '/../../data/point3.shp', GeoRuby::Shp4r::ShpType::POINT, [GeoRuby::Shp4r::Dbf::Field.new('Hoyoyo', 'C', 10, 0)])
|
217
217
|
shpfile.transaction do |tr|
|
218
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(123,123.4),'Hoyoyo' =>
|
218
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::Point.from_x_y(123, 123.4), 'Hoyoyo' => 'HJHJJ'))
|
219
219
|
end
|
220
220
|
expect(shpfile.record_count).to eql(1)
|
221
221
|
shpfile.close
|
222
222
|
rm_all_shp(File.dirname(__FILE__) + '/../../data/point3')
|
223
223
|
end
|
224
224
|
|
225
|
-
it
|
226
|
-
shpfile = GeoRuby::Shp4r::ShpFile.create(File.dirname(__FILE__) + '/../../data/multipoint3.shp',GeoRuby::Shp4r::ShpType::MULTIPOINT,[GeoRuby::Shp4r::Dbf::Field.new(
|
225
|
+
it 'test_creation_multipoint' do
|
226
|
+
shpfile = GeoRuby::Shp4r::ShpFile.create(File.dirname(__FILE__) + '/../../data/multipoint3.shp', GeoRuby::Shp4r::ShpType::MULTIPOINT, [GeoRuby::Shp4r::Dbf::Field.new('Hoyoyo', 'C', 10), GeoRuby::Shp4r::Dbf::Field.new('Hello', 'N', 10)])
|
227
227
|
shpfile.transaction do |tr|
|
228
|
-
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[123,123.4],[345,12.2]]),'Hoyoyo' =>
|
228
|
+
tr.add(GeoRuby::Shp4r::ShpRecord.new(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[123, 123.4], [345, 12.2]]), 'Hoyoyo' => 'HJHJJ', 'Hello' => 5))
|
229
229
|
end
|
230
230
|
expect(shpfile.record_count).to eql(1)
|
231
231
|
shpfile.close
|