aixm 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -1
  3. data/Guardfile +1 -1
  4. data/README.md +146 -17
  5. data/aixm.gemspec +3 -1
  6. data/lib/aixm.rb +12 -10
  7. data/lib/aixm/component/base.rb +6 -0
  8. data/lib/aixm/component/class_layer.rb +49 -0
  9. data/lib/aixm/component/geometry.rb +73 -0
  10. data/lib/aixm/component/geometry/arc.rb +53 -0
  11. data/lib/aixm/component/geometry/border.rb +49 -0
  12. data/lib/aixm/component/geometry/circle.rb +56 -0
  13. data/lib/aixm/component/geometry/point.rb +42 -0
  14. data/lib/aixm/component/schedule.rb +45 -0
  15. data/lib/aixm/{vertical/limits.rb → component/vertical_limits.rb} +9 -14
  16. data/lib/aixm/document.rb +30 -19
  17. data/lib/aixm/feature/airspace.rb +60 -29
  18. data/lib/aixm/refinements.rb +49 -2
  19. data/lib/aixm/shortcuts.rb +30 -0
  20. data/lib/aixm/version.rb +1 -1
  21. data/spec/factory.rb +42 -25
  22. data/spec/lib/aixm/component/class_layer_spec.rb +74 -0
  23. data/spec/lib/aixm/{horizontal → component/geometry}/arc_spec.rb +11 -11
  24. data/spec/lib/aixm/component/geometry/border_spec.rb +30 -0
  25. data/spec/lib/aixm/{horizontal → component/geometry}/circle_spec.rb +8 -8
  26. data/spec/lib/aixm/{horizontal → component/geometry}/point_spec.rb +7 -7
  27. data/spec/lib/aixm/{geometry_spec.rb → component/geometry_spec.rb} +39 -40
  28. data/spec/lib/aixm/component/schedule_spec.rb +33 -0
  29. data/spec/lib/aixm/{vertical/limits_spec.rb → component/vertical_limits_spec.rb} +10 -10
  30. data/spec/lib/aixm/document_spec.rb +97 -36
  31. data/spec/lib/aixm/feature/airspace_spec.rb +230 -71
  32. data/spec/lib/aixm/refinements_spec.rb +52 -12
  33. metadata +30 -23
  34. data/lib/aixm/constants.rb +0 -6
  35. data/lib/aixm/geometry.rb +0 -71
  36. data/lib/aixm/horizontal/arc.rb +0 -50
  37. data/lib/aixm/horizontal/border.rb +0 -45
  38. data/lib/aixm/horizontal/circle.rb +0 -53
  39. data/lib/aixm/horizontal/point.rb +0 -39
  40. data/spec/lib/aixm/horizontal/border_spec.rb +0 -47
@@ -1,75 +1,74 @@
1
- require_relative '../../spec_helper'
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 :valid?
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::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
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 :valid?
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::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
35
- geometry << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
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 :valid?
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::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
50
- geometry << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
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 :valid?
56
+ subject.wont_be :complete?
58
57
  end
59
58
 
60
59
  it "must recognize closed" do
61
- subject << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
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 :valid?
63
+ subject.must_be :complete?
65
64
  end
66
65
 
67
66
  it "must return elements" do
68
- subject.horizontals.count.must_equal 2
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 '281EE1FA'
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::Horizontal::Arc.new(xy: AIXM::XY.new(lat: 11, long: 22), center_xy: AIXM::XY.new(lat: 10, long: 20), clockwise: true)
97
- geometry << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
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 :valid?
103
+ subject.wont_be :complete?
105
104
  end
106
105
 
107
106
  it "must recognize closed" do
108
- subject << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
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 :valid?
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 '8DC81708'
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::Horizontal::Border.new(xy: AIXM::XY.new(lat: 11, long: 22), name: 'foobar')
142
- geometry << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 22, long: 33))
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 :valid?
148
+ subject.wont_be :complete?
150
149
  end
151
150
 
152
151
  it "must recognize closed" do
153
- subject << AIXM::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
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 :valid?
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 'F208007C'
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::Horizontal::Circle.new(center_xy: AIXM::XY.new(lat: 11, long: 22), radius: 10)
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 :valid?
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::Horizontal::Point.new(xy: AIXM::XY.new(lat: 11, long: 22))
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 :valid?
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 'CCBB63FD'
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::Vertical::Limits do
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::Vertical::Limits.new(upper_z: 0, lower_z: z, max_z: z, min_z: z) }.must_raise ArgumentError
8
- -> { AIXM::Vertical::Limits.new(upper_z: z, lower_z: 0, max_z: z, min_z: z) }.must_raise ArgumentError
9
- -> { AIXM::Vertical::Limits.new(upper_z: z, lower_z: z, max_z: 0, min_z: z) }.must_raise ArgumentError
10
- -> { AIXM::Vertical::Limits.new(upper_z: z, lower_z: z, max_z: z, min_z: 0) }.must_raise ArgumentError
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::Vertical::Limits.new(
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 'ABF2A04F'
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::Vertical::Limits.new(
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::Vertical::Limits.new(
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::Vertical::Limits.new(
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 :valid?
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 :valid?
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 0.1.0 Ruby gem" created="2018-01-18T12:00:00+01:00" effective="2018-01-18T12:00:00+01:00">
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="7F466CA0">
65
+ <AseUid mid="202650074">
33
66
  <codeType>D</codeType>
34
- <codeId>7F466CA0</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="7F466CA0">
91
+ <AseUid mid="202650074">
54
92
  <codeType>D</codeType>
55
- <codeId>7F466CA0</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="E1115E8A">
119
+ <AseUid mid="646302629">
81
120
  <codeType>D</codeType>
82
- <codeId>E1115E8A</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="E1115E8A">
145
+ <AseUid mid="646302629">
102
146
  <codeType>D</codeType>
103
- <codeId>E1115E8A</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 0.1.0 Ruby gem" created="2018-01-18T12:00:00+01:00" effective="2018-01-18T12:00:00+01:00">
123
- <Ase>
124
- <AseUid mid="7F466CA0">
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>7F466CA0</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="7F466CA0">
196
+ <AseUid mid="202650074" newEntity="true">
146
197
  <codeType>D</codeType>
147
- <codeId>7F466CA0</codeId>
198
+ <codeId>202650074</codeId>
148
199
  </AseUid>
149
200
  </AbdUid>
150
201
  <Avx>
151
202
  <codeType>CWA</codeType>
152
- <geoLat>475133.00N</geoLat>
153
- <geoLong>0073336.00E</geoLong>
203
+ <geoLat>47.85916667N</geoLat>
204
+ <geoLong>7.56000000E</geoLong>
154
205
  <codeDatum>WGE</codeDatum>
155
- <geoLatArc>475415.00N</geoLatArc>
156
- <geoLongArc>0073348.00E</geoLongArc>
206
+ <geoLatArc>47.90416667N</geoLatArc>
207
+ <geoLongArc>7.56333333E</geoLongArc>
157
208
  </Avx>
158
209
  <Avx>
159
210
  <codeType>FNT</codeType>
160
- <geoLat>475637.00N</geoLat>
161
- <geoLong>0073545.00E</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>475133.00N</geoLat>
167
- <geoLong>0073336.00E</geoLong>
220
+ <geoLat>47.85916667N</geoLat>
221
+ <geoLong>7.56000000E</geoLong>
168
222
  <codeDatum>WGE</codeDatum>
169
223
  </Avx>
170
224
  </Abd>
171
- <Ase>
172
- <AseUid mid="E1115E8A">
225
+ <!-- Airspace: [D] CIRCLE AIRSPACE -->
226
+ <Ase xt_classLayersAvail="false">
227
+ <AseUid mid="646302629" newEntity="true">
173
228
  <codeType>D</codeType>
174
- <codeId>E1115E8A</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="E1115E8A">
254
+ <AseUid mid="646302629" newEntity="true">
194
255
  <codeType>D</codeType>
195
- <codeId>E1115E8A</codeId>
256
+ <codeId>646302629</codeId>
196
257
  </AseUid>
197
258
  </AbdUid>
198
259
  <Avx>
199
260
  <codeType>CWA</codeType>
200
- <geoLat>474023.76N</geoLat>
201
- <geoLong>0045300.00E</geoLong>
261
+ <geoLat>47.67326549N</geoLat>
262
+ <geoLong>4.88333333E</geoLong>
202
263
  <codeDatum>WGE</codeDatum>
203
- <geoLatArc>473500.00N</geoLatArc>
204
- <geoLongArc>0045300.00E</geoLongArc>
264
+ <geoLatArc>47.58333333N</geoLatArc>
265
+ <geoLongArc>4.88333333E</geoLongArc>
205
266
  </Avx>
206
267
  </Abd>
207
268
  </AIXM-Snapshot>