aixm 0.1.0 → 0.1.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -1
- data/Guardfile +1 -1
- data/README.md +146 -17
- data/aixm.gemspec +3 -1
- data/lib/aixm.rb +12 -10
- data/lib/aixm/component/base.rb +6 -0
- data/lib/aixm/component/class_layer.rb +49 -0
- data/lib/aixm/component/geometry.rb +73 -0
- data/lib/aixm/component/geometry/arc.rb +53 -0
- data/lib/aixm/component/geometry/border.rb +49 -0
- data/lib/aixm/component/geometry/circle.rb +56 -0
- data/lib/aixm/component/geometry/point.rb +42 -0
- data/lib/aixm/component/schedule.rb +45 -0
- data/lib/aixm/{vertical/limits.rb → component/vertical_limits.rb} +9 -14
- data/lib/aixm/document.rb +30 -19
- data/lib/aixm/feature/airspace.rb +60 -29
- data/lib/aixm/refinements.rb +49 -2
- data/lib/aixm/shortcuts.rb +30 -0
- data/lib/aixm/version.rb +1 -1
- data/spec/factory.rb +42 -25
- data/spec/lib/aixm/component/class_layer_spec.rb +74 -0
- data/spec/lib/aixm/{horizontal → component/geometry}/arc_spec.rb +11 -11
- data/spec/lib/aixm/component/geometry/border_spec.rb +30 -0
- data/spec/lib/aixm/{horizontal → component/geometry}/circle_spec.rb +8 -8
- data/spec/lib/aixm/{horizontal → component/geometry}/point_spec.rb +7 -7
- data/spec/lib/aixm/{geometry_spec.rb → component/geometry_spec.rb} +39 -40
- data/spec/lib/aixm/component/schedule_spec.rb +33 -0
- data/spec/lib/aixm/{vertical/limits_spec.rb → component/vertical_limits_spec.rb} +10 -10
- data/spec/lib/aixm/document_spec.rb +97 -36
- data/spec/lib/aixm/feature/airspace_spec.rb +230 -71
- data/spec/lib/aixm/refinements_spec.rb +52 -12
- metadata +30 -23
- data/lib/aixm/constants.rb +0 -6
- data/lib/aixm/geometry.rb +0 -71
- data/lib/aixm/horizontal/arc.rb +0 -50
- data/lib/aixm/horizontal/border.rb +0 -45
- data/lib/aixm/horizontal/circle.rb +0 -53
- data/lib/aixm/horizontal/point.rb +0 -39
- data/spec/lib/aixm/horizontal/border_spec.rb +0 -47
@@ -1,75 +1,74 @@
|
|
1
|
-
require_relative '
|
2
|
-
|
3
|
-
describe AIXM::Geometry do
|
1
|
+
require_relative '../../../spec_helper'
|
4
2
|
|
3
|
+
describe AIXM::Component::Geometry do
|
5
4
|
context "singularity" do
|
6
5
|
subject do
|
7
|
-
AIXM::Geometry.new
|
6
|
+
AIXM::Component::Geometry.new
|
8
7
|
end
|
9
8
|
|
10
9
|
it "must fail validation" do
|
11
10
|
subject.wont_be :circle?
|
12
11
|
subject.wont_be :closed_shape?
|
13
|
-
subject.wont_be :
|
12
|
+
subject.wont_be :complete?
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
16
|
context "point" do
|
18
17
|
subject do
|
19
|
-
AIXM::Geometry.new.tap do |geometry|
|
20
|
-
geometry << AIXM::
|
18
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
19
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
24
23
|
it "must fail validation" do
|
25
24
|
subject.wont_be :circle?
|
26
25
|
subject.wont_be :closed_shape?
|
27
|
-
subject.wont_be :
|
26
|
+
subject.wont_be :complete?
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
30
|
context "line" do
|
32
31
|
subject do
|
33
|
-
AIXM::Geometry.new.tap do |geometry|
|
34
|
-
geometry << AIXM::
|
35
|
-
geometry << AIXM::
|
32
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
33
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
34
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
38
|
it "must fail validation" do
|
40
39
|
subject.wont_be :circle?
|
41
40
|
subject.wont_be :closed_shape?
|
42
|
-
subject.wont_be :
|
41
|
+
subject.wont_be :complete?
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
46
45
|
context "polygon" do
|
47
46
|
subject do
|
48
|
-
AIXM::Geometry.new.tap do |geometry|
|
49
|
-
geometry << AIXM::
|
50
|
-
geometry << AIXM::
|
47
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
48
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
49
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
|
51
50
|
end
|
52
51
|
end
|
53
52
|
|
54
53
|
it "must recognize unclosed" do
|
55
54
|
subject.wont_be :circle?
|
56
55
|
subject.wont_be :closed_shape?
|
57
|
-
subject.wont_be :
|
56
|
+
subject.wont_be :complete?
|
58
57
|
end
|
59
58
|
|
60
59
|
it "must recognize closed" do
|
61
|
-
subject << AIXM::
|
60
|
+
subject << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
62
61
|
subject.wont_be :circle?
|
63
62
|
subject.must_be :closed_shape?
|
64
|
-
subject.must_be :
|
63
|
+
subject.must_be :complete?
|
65
64
|
end
|
66
65
|
|
67
66
|
it "must return elements" do
|
68
|
-
subject.
|
67
|
+
subject.segments.count.must_equal 2
|
69
68
|
end
|
70
69
|
|
71
70
|
it "must return digest of payload" do
|
72
|
-
subject.to_digest.must_equal
|
71
|
+
subject.to_digest.must_equal 310635400
|
73
72
|
end
|
74
73
|
|
75
74
|
it "must build valid XML" do
|
@@ -92,23 +91,23 @@ describe AIXM::Geometry do
|
|
92
91
|
|
93
92
|
context "arc" do
|
94
93
|
subject do
|
95
|
-
AIXM::Geometry.new.tap do |geometry|
|
96
|
-
geometry << AIXM::
|
97
|
-
geometry << AIXM::
|
94
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
95
|
+
geometry << AIXM::Component::Geometry::Arc.new(xy: AIXM::XY.new(lat: 11, long: 22), center_xy: AIXM::XY.new(lat: 10, long: 20), clockwise: true)
|
96
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
|
98
97
|
end
|
99
98
|
end
|
100
99
|
|
101
100
|
it "must recognize unclosed" do
|
102
101
|
subject.wont_be :circle?
|
103
102
|
subject.wont_be :closed_shape?
|
104
|
-
subject.wont_be :
|
103
|
+
subject.wont_be :complete?
|
105
104
|
end
|
106
105
|
|
107
106
|
it "must recognize closed" do
|
108
|
-
subject << AIXM::
|
107
|
+
subject << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
109
108
|
subject.wont_be :circle?
|
110
109
|
subject.must_be :closed_shape?
|
111
|
-
subject.must_be :
|
110
|
+
subject.must_be :complete?
|
112
111
|
end
|
113
112
|
|
114
113
|
it "must build valid XML" do
|
@@ -131,29 +130,29 @@ describe AIXM::Geometry do
|
|
131
130
|
end
|
132
131
|
|
133
132
|
it "must return digest of payload" do
|
134
|
-
subject.to_digest.must_equal
|
133
|
+
subject.to_digest.must_equal 8205396
|
135
134
|
end
|
136
135
|
end
|
137
136
|
|
138
137
|
context "border" do
|
139
138
|
subject do
|
140
|
-
AIXM::Geometry.new.tap do |geometry|
|
141
|
-
geometry << AIXM::
|
142
|
-
geometry << AIXM::
|
139
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
140
|
+
geometry << AIXM::Component::Geometry::Border.new(xy: AIXM::XY.new(lat: 11, long: 22), name: 'foobar')
|
141
|
+
geometry << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
|
143
142
|
end
|
144
143
|
end
|
145
144
|
|
146
145
|
it "must recognize unclosed" do
|
147
146
|
subject.wont_be :circle?
|
148
147
|
subject.wont_be :closed_shape?
|
149
|
-
subject.wont_be :
|
148
|
+
subject.wont_be :complete?
|
150
149
|
end
|
151
150
|
|
152
151
|
it "must recognize closed" do
|
153
|
-
subject << AIXM::
|
152
|
+
subject << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
154
153
|
subject.wont_be :circle?
|
155
154
|
subject.must_be :closed_shape?
|
156
|
-
subject.must_be :
|
155
|
+
subject.must_be :complete?
|
157
156
|
end
|
158
157
|
|
159
158
|
it "must build valid XML" do
|
@@ -174,28 +173,28 @@ describe AIXM::Geometry do
|
|
174
173
|
end
|
175
174
|
|
176
175
|
it "must return digest of payload" do
|
177
|
-
subject.to_digest.must_equal
|
176
|
+
subject.to_digest.must_equal 376662362
|
178
177
|
end
|
179
178
|
end
|
180
179
|
|
181
180
|
context "circle" do
|
182
181
|
subject do
|
183
|
-
AIXM::Geometry.new.tap do |geometry|
|
184
|
-
geometry << AIXM::
|
182
|
+
AIXM::Component::Geometry.new.tap do |geometry|
|
183
|
+
geometry << AIXM::Component::Geometry::Circle.new(center_xy: AIXM::XY.new(lat: 11, long: 22), radius: 10)
|
185
184
|
end
|
186
185
|
end
|
187
186
|
|
188
187
|
it "must pass validation" do
|
189
188
|
subject.must_be :circle?
|
190
189
|
subject.wont_be :closed_shape?
|
191
|
-
subject.must_be :
|
190
|
+
subject.must_be :complete?
|
192
191
|
end
|
193
192
|
|
194
193
|
it "must fail validation when additional elements are present" do
|
195
|
-
subject << AIXM::
|
194
|
+
subject << AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
|
196
195
|
subject.wont_be :circle?
|
197
196
|
subject.wont_be :closed_shape?
|
198
|
-
subject.wont_be :
|
197
|
+
subject.wont_be :complete?
|
199
198
|
end
|
200
199
|
|
201
200
|
it "must build valid XML" do
|
@@ -212,7 +211,7 @@ describe AIXM::Geometry do
|
|
212
211
|
end
|
213
212
|
|
214
213
|
it "must return digest of payload" do
|
215
|
-
subject.to_digest.must_equal
|
214
|
+
subject.to_digest.must_equal 141059998
|
216
215
|
end
|
217
216
|
end
|
218
217
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Component::Schedule do
|
4
|
+
describe :initialize do
|
5
|
+
it "won't accept invalid arguments" do
|
6
|
+
-> { AIXM::Component::Schedule.new(code: 'foobar') }.must_raise ArgumentError
|
7
|
+
end
|
8
|
+
|
9
|
+
it "must accept explicit codes" do
|
10
|
+
AIXM::Component::Schedule.new(code: :sunrise_to_sunset).code.must_equal :HJ
|
11
|
+
end
|
12
|
+
|
13
|
+
it "must accept short codes" do
|
14
|
+
AIXM::Component::Schedule.new(code: :H24).code.must_equal :H24
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe :to_digest do
|
19
|
+
it "must return digest of payload" do
|
20
|
+
subject = AIXM::Component::Schedule.new(code: :H24)
|
21
|
+
subject.to_digest.must_equal 962036587
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe :to_xml do
|
26
|
+
it "must build correct XML" do
|
27
|
+
subject = AIXM::Component::Schedule.new(code: :H24)
|
28
|
+
subject.to_xml.must_equal <<~END
|
29
|
+
<codeWorkHr>H24</codeWorkHr>
|
30
|
+
END
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
1
|
require_relative '../../../spec_helper'
|
2
2
|
|
3
|
-
describe AIXM::
|
3
|
+
describe AIXM::Component::VerticalLimits do
|
4
4
|
describe :initialize do
|
5
5
|
it "won't accept invalid arguments" do
|
6
6
|
z = AIXM::Z.new(alt: 1000, code: :QNH)
|
7
|
-
-> { AIXM::
|
8
|
-
-> { AIXM::
|
9
|
-
-> { AIXM::
|
10
|
-
-> { AIXM::
|
7
|
+
-> { AIXM::Component::VerticalLimits.new(upper_z: 0, lower_z: z, max_z: z, min_z: z) }.must_raise ArgumentError
|
8
|
+
-> { AIXM::Component::VerticalLimits.new(upper_z: z, lower_z: 0, max_z: z, min_z: z) }.must_raise ArgumentError
|
9
|
+
-> { AIXM::Component::VerticalLimits.new(upper_z: z, lower_z: z, max_z: 0, min_z: z) }.must_raise ArgumentError
|
10
|
+
-> { AIXM::Component::VerticalLimits.new(upper_z: z, lower_z: z, max_z: z, min_z: 0) }.must_raise ArgumentError
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe :to_digest do
|
15
15
|
it "must return digest of payload" do
|
16
|
-
subject = AIXM::
|
16
|
+
subject = AIXM::Component::VerticalLimits.new(
|
17
17
|
upper_z: AIXM::Z.new(alt: 2000, code: :QNH),
|
18
18
|
lower_z: AIXM::GROUND
|
19
19
|
)
|
20
|
-
subject.to_digest.must_equal
|
20
|
+
subject.to_digest.must_equal 929399130
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
describe :to_xml do
|
25
25
|
it "must build correct XML with only upper_z and lower_z" do
|
26
|
-
subject = AIXM::
|
26
|
+
subject = AIXM::Component::VerticalLimits.new(
|
27
27
|
upper_z: AIXM::Z.new(alt: 2000, code: :QNH),
|
28
28
|
lower_z: AIXM::GROUND
|
29
29
|
)
|
@@ -38,7 +38,7 @@ describe AIXM::Vertical::Limits do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "must build correct XML with additional max_z" do
|
41
|
-
subject = AIXM::
|
41
|
+
subject = AIXM::Component::VerticalLimits.new(
|
42
42
|
upper_z: AIXM::Z.new(alt: 65, code: :QNE),
|
43
43
|
lower_z: AIXM::Z.new(alt: 1000, code: :QFE),
|
44
44
|
max_z: AIXM::Z.new(alt: 6000, code: :QNH)
|
@@ -57,7 +57,7 @@ describe AIXM::Vertical::Limits do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "must build correct XML with additional min_z" do
|
60
|
-
subject = AIXM::
|
60
|
+
subject = AIXM::Component::VerticalLimits.new(
|
61
61
|
upper_z: AIXM::Z.new(alt: 65, code: :QNE),
|
62
62
|
lower_z: AIXM::Z.new(alt: 45, code: :QNE),
|
63
63
|
min_z: AIXM::Z.new(alt: 3000, code: :QNH)
|
@@ -1,13 +1,45 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
|
3
3
|
describe AIXM::Document do
|
4
|
+
describe :initialize do
|
5
|
+
it "won't accept invalid arguments" do
|
6
|
+
-> { AIXM::Document.new(created_at: 0) }.must_raise ArgumentError
|
7
|
+
-> { AIXM::Document.new(created_at: 'foobar') }.must_raise ArgumentError
|
8
|
+
-> { AIXM::Document.new(effective_at: 0) }.must_raise ArgumentError
|
9
|
+
-> { AIXM::Document.new(effective_at: 'foobar') }.must_raise ArgumentError
|
10
|
+
end
|
11
|
+
|
12
|
+
it "must accept strings" do
|
13
|
+
string = '2018-01-01 12:00:00 +0100'
|
14
|
+
AIXM::Document.new(created_at: string).created_at.must_equal Time.parse(string)
|
15
|
+
AIXM::Document.new(effective_at: string).effective_at.must_equal Time.parse(string)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "must accept dates" do
|
19
|
+
date = Date.parse('2018-01-01')
|
20
|
+
AIXM::Document.new(created_at: date).created_at.must_equal date.to_time
|
21
|
+
AIXM::Document.new(effective_at: date).effective_at.must_equal date.to_time
|
22
|
+
end
|
23
|
+
|
24
|
+
it "must accept times" do
|
25
|
+
time = Time.parse('2018-01-01 12:00:00 +0100')
|
26
|
+
AIXM::Document.new(created_at: time).created_at.must_equal time
|
27
|
+
AIXM::Document.new(effective_at: time).effective_at.must_equal time
|
28
|
+
end
|
29
|
+
|
30
|
+
it "must accept nils" do
|
31
|
+
AIXM::Document.new(created_at: nil).created_at.must_be :nil?
|
32
|
+
AIXM::Document.new(effective_at: nil).effective_at.must_be :nil?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
4
36
|
context "incomplete" do
|
5
37
|
subject do
|
6
38
|
AIXM::Document.new
|
7
39
|
end
|
8
40
|
|
9
41
|
it "must fail validation" do
|
10
|
-
subject.wont_be :
|
42
|
+
subject.wont_be :complete?
|
11
43
|
end
|
12
44
|
end
|
13
45
|
|
@@ -21,19 +53,22 @@ describe AIXM::Document do
|
|
21
53
|
end
|
22
54
|
|
23
55
|
it "must pass validation" do
|
24
|
-
subject.must_be :
|
56
|
+
subject.must_be :complete?
|
25
57
|
end
|
26
58
|
|
27
59
|
it "must build correct XML without extensions" do
|
28
|
-
subject.to_xml.must_equal <<~END
|
60
|
+
subject.to_xml.must_equal <<~"END"
|
29
61
|
<?xml version="1.0" encoding="UTF-8"?>
|
30
|
-
<AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5" origin="AIXM
|
62
|
+
<AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5" origin="AIXM #{AIXM::VERSION} Ruby gem" created="2018-01-18T12:00:00+01:00" effective="2018-01-18T12:00:00+01:00">
|
63
|
+
<!-- Airspace: [D] POLYGON AIRSPACE -->
|
31
64
|
<Ase>
|
32
|
-
<AseUid mid="
|
65
|
+
<AseUid mid="202650074">
|
33
66
|
<codeType>D</codeType>
|
34
|
-
<codeId>
|
67
|
+
<codeId>202650074</codeId>
|
35
68
|
</AseUid>
|
69
|
+
<txtLocalType>POLYGON</txtLocalType>
|
36
70
|
<txtName>POLYGON AIRSPACE</txtName>
|
71
|
+
<codeClass>C</codeClass>
|
37
72
|
<codeDistVerUpper>STD</codeDistVerUpper>
|
38
73
|
<valDistVerUpper>65</valDistVerUpper>
|
39
74
|
<uomDistVerUpper>FL</uomDistVerUpper>
|
@@ -46,13 +81,16 @@ describe AIXM::Document do
|
|
46
81
|
<codeDistVerMnm>HEI</codeDistVerMnm>
|
47
82
|
<valDistVerMnm>3000</valDistVerMnm>
|
48
83
|
<uomDistVerMnm>FT</uomDistVerMnm>
|
84
|
+
<Att>
|
85
|
+
<codeWorkHr>H24</codeWorkHr>
|
86
|
+
</Att>
|
49
87
|
<txtRmk>polygon airspace</txtRmk>
|
50
88
|
</Ase>
|
51
89
|
<Abd>
|
52
90
|
<AbdUid>
|
53
|
-
<AseUid mid="
|
91
|
+
<AseUid mid="202650074">
|
54
92
|
<codeType>D</codeType>
|
55
|
-
<codeId>
|
93
|
+
<codeId>202650074</codeId>
|
56
94
|
</AseUid>
|
57
95
|
</AbdUid>
|
58
96
|
<Avx>
|
@@ -76,12 +114,15 @@ describe AIXM::Document do
|
|
76
114
|
<codeDatum>WGE</codeDatum>
|
77
115
|
</Avx>
|
78
116
|
</Abd>
|
117
|
+
<!-- Airspace: [D] CIRCLE AIRSPACE -->
|
79
118
|
<Ase>
|
80
|
-
<AseUid mid="
|
119
|
+
<AseUid mid="646302629">
|
81
120
|
<codeType>D</codeType>
|
82
|
-
<codeId>
|
121
|
+
<codeId>646302629</codeId>
|
83
122
|
</AseUid>
|
123
|
+
<txtLocalType>CIRCLE</txtLocalType>
|
84
124
|
<txtName>CIRCLE AIRSPACE</txtName>
|
125
|
+
<codeClass>C</codeClass>
|
85
126
|
<codeDistVerUpper>STD</codeDistVerUpper>
|
86
127
|
<valDistVerUpper>65</valDistVerUpper>
|
87
128
|
<uomDistVerUpper>FL</uomDistVerUpper>
|
@@ -94,13 +135,16 @@ describe AIXM::Document do
|
|
94
135
|
<codeDistVerMnm>HEI</codeDistVerMnm>
|
95
136
|
<valDistVerMnm>3000</valDistVerMnm>
|
96
137
|
<uomDistVerMnm>FT</uomDistVerMnm>
|
138
|
+
<Att>
|
139
|
+
<codeWorkHr>H24</codeWorkHr>
|
140
|
+
</Att>
|
97
141
|
<txtRmk>circle airspace</txtRmk>
|
98
142
|
</Ase>
|
99
143
|
<Abd>
|
100
144
|
<AbdUid>
|
101
|
-
<AseUid mid="
|
145
|
+
<AseUid mid="646302629">
|
102
146
|
<codeType>D</codeType>
|
103
|
-
<codeId>
|
147
|
+
<codeId>646302629</codeId>
|
104
148
|
</AseUid>
|
105
149
|
</AbdUid>
|
106
150
|
<Avx>
|
@@ -117,15 +161,18 @@ describe AIXM::Document do
|
|
117
161
|
end
|
118
162
|
|
119
163
|
it "must build correct XML with OFM extensions" do
|
120
|
-
subject.to_xml(:OFM).must_equal <<~END
|
164
|
+
subject.to_xml(:OFM).must_equal <<~"END"
|
121
165
|
<?xml version="1.0" encoding="UTF-8"?>
|
122
|
-
<AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5 + OFM extensions of version 0.1" origin="AIXM
|
123
|
-
|
124
|
-
|
166
|
+
<AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5 + OFM extensions of version 0.1" origin="AIXM #{AIXM::VERSION} Ruby gem" created="2018-01-18T12:00:00+01:00" effective="2018-01-18T12:00:00+01:00">
|
167
|
+
<!-- Airspace: [D] POLYGON AIRSPACE -->
|
168
|
+
<Ase xt_classLayersAvail="false">
|
169
|
+
<AseUid mid="202650074" newEntity="true">
|
125
170
|
<codeType>D</codeType>
|
126
|
-
<codeId>
|
171
|
+
<codeId>202650074</codeId>
|
127
172
|
</AseUid>
|
173
|
+
<txtLocalType>POLYGON</txtLocalType>
|
128
174
|
<txtName>POLYGON AIRSPACE</txtName>
|
175
|
+
<codeClass>C</codeClass>
|
129
176
|
<codeDistVerUpper>STD</codeDistVerUpper>
|
130
177
|
<valDistVerUpper>65</valDistVerUpper>
|
131
178
|
<uomDistVerUpper>FL</uomDistVerUpper>
|
@@ -138,42 +185,52 @@ describe AIXM::Document do
|
|
138
185
|
<codeDistVerMnm>HEI</codeDistVerMnm>
|
139
186
|
<valDistVerMnm>3000</valDistVerMnm>
|
140
187
|
<uomDistVerMnm>FT</uomDistVerMnm>
|
188
|
+
<Att>
|
189
|
+
<codeWorkHr>H24</codeWorkHr>
|
190
|
+
</Att>
|
141
191
|
<txtRmk>polygon airspace</txtRmk>
|
192
|
+
<xt_selAvail>false</xt_selAvail>
|
142
193
|
</Ase>
|
143
194
|
<Abd>
|
144
195
|
<AbdUid>
|
145
|
-
<AseUid mid="
|
196
|
+
<AseUid mid="202650074" newEntity="true">
|
146
197
|
<codeType>D</codeType>
|
147
|
-
<codeId>
|
198
|
+
<codeId>202650074</codeId>
|
148
199
|
</AseUid>
|
149
200
|
</AbdUid>
|
150
201
|
<Avx>
|
151
202
|
<codeType>CWA</codeType>
|
152
|
-
<geoLat>
|
153
|
-
<geoLong>
|
203
|
+
<geoLat>47.85916667N</geoLat>
|
204
|
+
<geoLong>7.56000000E</geoLong>
|
154
205
|
<codeDatum>WGE</codeDatum>
|
155
|
-
<geoLatArc>
|
156
|
-
<geoLongArc>
|
206
|
+
<geoLatArc>47.90416667N</geoLatArc>
|
207
|
+
<geoLongArc>7.56333333E</geoLongArc>
|
157
208
|
</Avx>
|
158
209
|
<Avx>
|
159
210
|
<codeType>FNT</codeType>
|
160
|
-
<geoLat>
|
161
|
-
<geoLong>
|
211
|
+
<geoLat>47.94361111N</geoLat>
|
212
|
+
<geoLong>7.59583333E</geoLong>
|
162
213
|
<codeDatum>WGE</codeDatum>
|
214
|
+
<GbrUid>
|
215
|
+
<txtName>FRANCE_GERMANY</txtName>
|
216
|
+
</GbrUid>
|
163
217
|
</Avx>
|
164
218
|
<Avx>
|
165
219
|
<codeType>GRC</codeType>
|
166
|
-
<geoLat>
|
167
|
-
<geoLong>
|
220
|
+
<geoLat>47.85916667N</geoLat>
|
221
|
+
<geoLong>7.56000000E</geoLong>
|
168
222
|
<codeDatum>WGE</codeDatum>
|
169
223
|
</Avx>
|
170
224
|
</Abd>
|
171
|
-
|
172
|
-
|
225
|
+
<!-- Airspace: [D] CIRCLE AIRSPACE -->
|
226
|
+
<Ase xt_classLayersAvail="false">
|
227
|
+
<AseUid mid="646302629" newEntity="true">
|
173
228
|
<codeType>D</codeType>
|
174
|
-
<codeId>
|
229
|
+
<codeId>646302629</codeId>
|
175
230
|
</AseUid>
|
231
|
+
<txtLocalType>CIRCLE</txtLocalType>
|
176
232
|
<txtName>CIRCLE AIRSPACE</txtName>
|
233
|
+
<codeClass>C</codeClass>
|
177
234
|
<codeDistVerUpper>STD</codeDistVerUpper>
|
178
235
|
<valDistVerUpper>65</valDistVerUpper>
|
179
236
|
<uomDistVerUpper>FL</uomDistVerUpper>
|
@@ -186,22 +243,26 @@ describe AIXM::Document do
|
|
186
243
|
<codeDistVerMnm>HEI</codeDistVerMnm>
|
187
244
|
<valDistVerMnm>3000</valDistVerMnm>
|
188
245
|
<uomDistVerMnm>FT</uomDistVerMnm>
|
246
|
+
<Att>
|
247
|
+
<codeWorkHr>H24</codeWorkHr>
|
248
|
+
</Att>
|
189
249
|
<txtRmk>circle airspace</txtRmk>
|
250
|
+
<xt_selAvail>false</xt_selAvail>
|
190
251
|
</Ase>
|
191
252
|
<Abd>
|
192
253
|
<AbdUid>
|
193
|
-
<AseUid mid="
|
254
|
+
<AseUid mid="646302629" newEntity="true">
|
194
255
|
<codeType>D</codeType>
|
195
|
-
<codeId>
|
256
|
+
<codeId>646302629</codeId>
|
196
257
|
</AseUid>
|
197
258
|
</AbdUid>
|
198
259
|
<Avx>
|
199
260
|
<codeType>CWA</codeType>
|
200
|
-
<geoLat>
|
201
|
-
<geoLong>
|
261
|
+
<geoLat>47.67326549N</geoLat>
|
262
|
+
<geoLong>4.88333333E</geoLong>
|
202
263
|
<codeDatum>WGE</codeDatum>
|
203
|
-
<geoLatArc>
|
204
|
-
<geoLongArc>
|
264
|
+
<geoLatArc>47.58333333N</geoLatArc>
|
265
|
+
<geoLongArc>4.88333333E</geoLongArc>
|
205
266
|
</Avx>
|
206
267
|
</Abd>
|
207
268
|
</AIXM-Snapshot>
|