aixm 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +96 -72
  4. data/README.md +0 -1
  5. data/lib/aixm/component/geometry.rb +8 -2
  6. data/lib/aixm/component/layer.rb +83 -2
  7. data/lib/aixm/document.rb +11 -2
  8. data/lib/aixm/errors.rb +14 -2
  9. data/lib/aixm/feature.rb +2 -14
  10. data/lib/aixm/feature/airport.rb +19 -18
  11. data/lib/aixm/feature/airspace.rb +19 -21
  12. data/lib/aixm/feature/navigational_aid.rb +2 -2
  13. data/lib/aixm/feature/navigational_aid/designated_point.rb +1 -2
  14. data/lib/aixm/feature/navigational_aid/dme.rb +25 -4
  15. data/lib/aixm/feature/navigational_aid/marker.rb +1 -2
  16. data/lib/aixm/feature/navigational_aid/ndb.rb +1 -2
  17. data/lib/aixm/feature/navigational_aid/tacan.rb +5 -2
  18. data/lib/aixm/feature/navigational_aid/vor.rb +3 -4
  19. data/lib/aixm/feature/organisation.rb +3 -4
  20. data/lib/aixm/feature/unit.rb +3 -4
  21. data/lib/aixm/version.rb +1 -1
  22. data/schemas/ofmx/0/OFMX-CSV-Obstacle.json +209 -0
  23. data/schemas/ofmx/0/OFMX-CSV.json +12 -0
  24. data/schemas/ofmx/0/OFMX-DataTypes.xsd +64 -5
  25. data/schemas/ofmx/0/OFMX-Features.xsd +73 -23
  26. data/schemas/ofmx/0/OFMX-Snapshot.xsd +7 -2
  27. data/spec/factory.rb +8 -18
  28. data/spec/lib/aixm/component/geometry_spec.rb +27 -4
  29. data/spec/lib/aixm/component/helipad_spec.rb +2 -2
  30. data/spec/lib/aixm/component/layer_spec.rb +27 -0
  31. data/spec/lib/aixm/component/runway_spec.rb +13 -13
  32. data/spec/lib/aixm/document_spec.rb +56 -42
  33. data/spec/lib/aixm/feature/airport_spec.rb +15 -15
  34. data/spec/lib/aixm/feature/airspace_spec.rb +38 -30
  35. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +2 -2
  36. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +24 -7
  37. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +4 -4
  38. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +4 -4
  39. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +24 -7
  40. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +14 -14
  41. data/spec/lib/aixm/feature/organisation_spec.rb +2 -2
  42. data/spec/lib/aixm/feature/unit_spec.rb +11 -11
  43. data/spec/lib/aixm/feature_spec.rb +0 -20
  44. metadata +4 -2
@@ -2,7 +2,7 @@
2
2
  <!--
3
3
  ********************************************************************************
4
4
 
5
- OFMX 0.1.0 - open flightmaps exchange format
5
+ OFMX XML 0.1.0 - open flightmaps exchange format
6
6
 
7
7
  This is a fork of AIXM 4.5 to accomodate extensions and backports for
8
8
  open flightmaps.
@@ -37,7 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  -->
38
38
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
39
39
  <xsd:annotation>
40
- <xsd:documentation>Version: 4.5-1</xsd:documentation>
40
+ <xsd:documentation>Version: 0.1.0</xsd:documentation>
41
41
  </xsd:annotation>
42
42
  <xsd:include schemaLocation="OFMX-Features.xsd"/>
43
43
  <xsd:attributeGroup name="Changes"/>
@@ -192,6 +192,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
192
192
  <xsd:documentation>The version of the OFMX-Snapshot.xsd schema to which the message conforms</xsd:documentation>
193
193
  </xsd:annotation>
194
194
  </xsd:attribute>
195
+ <xsd:attribute name="region" type="codeRegion">
196
+ <xsd:annotation>
197
+ <xsd:documentation>Region the data in this document belongs to</xsd:documentation>
198
+ </xsd:annotation>
199
+ </xsd:attribute>
195
200
  <xsd:attribute name="origin" type="xsd:string" use="required">
196
201
  <xsd:annotation>
197
202
  <xsd:documentation>The originator (source) of the message</xsd:documentation>
@@ -38,8 +38,10 @@ module AIXM
38
38
  def layer
39
39
  AIXM.layer(
40
40
  class: :C,
41
+ location_indicator: 'XXXX',
41
42
  vertical_limits: vertical_limits
42
43
  ).tap do |layer|
44
+ layer.activity = :aerodrome_traffic
43
45
  layer.timetable = AIXM::H24
44
46
  layer.selective = true
45
47
  layer.remarks = 'airspace layer'
@@ -77,11 +79,10 @@ module AIXM
77
79
  def polygon_airspace
78
80
  AIXM.airspace(
79
81
  source: 'LF|GEN|0.0 FACTORY|0|0',
80
- region: 'LF',
81
82
  id: 'PA',
82
83
  type: :danger_area,
83
- name: 'POLYGON AIRSPACE',
84
- short_name: 'POLYGON'
84
+ local_type: 'POLYGON',
85
+ name: 'POLYGON AIRSPACE'
85
86
  ).tap do |airspace|
86
87
  airspace.layers << layer
87
88
  airspace.geometry = polygon_geometry
@@ -91,11 +92,10 @@ module AIXM
91
92
  def circle_airspace
92
93
  AIXM.airspace(
93
94
  source: 'LF|GEN|0.0 FACTORY|0|0',
94
- region: 'LF',
95
95
  id: 'CA',
96
96
  type: :danger_area,
97
- name: 'CIRCLE AIRSPACE',
98
- short_name: 'CIRCLE'
97
+ local_type: 'CIRCLE',
98
+ name: 'CIRCLE AIRSPACE'
99
99
  ).tap do |airspace|
100
100
  airspace.layers << layer
101
101
  airspace.geometry = circle_geometry
@@ -107,7 +107,6 @@ module AIXM
107
107
  def designated_point
108
108
  AIXM.designated_point(
109
109
  source: 'LF|GEN|0.0 FACTORY|0|0',
110
- region: 'LF',
111
110
  id: 'DDD',
112
111
  name: 'DESIGNATED POINT NAVAID',
113
112
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
@@ -122,7 +121,6 @@ module AIXM
122
121
  def dme
123
122
  AIXM.dme(
124
123
  source: 'LF|GEN|0.0 FACTORY|0|0',
125
- region: 'LF',
126
124
  organisation: organisation,
127
125
  id: 'MMM',
128
126
  name: 'DME NAVAID',
@@ -138,7 +136,6 @@ module AIXM
138
136
  def marker
139
137
  AIXM.marker(
140
138
  source: 'LF|GEN|0.0 FACTORY|0|0',
141
- region: 'LF',
142
139
  organisation: organisation,
143
140
  id: '---',
144
141
  name: 'MARKER NAVAID',
@@ -154,7 +151,6 @@ module AIXM
154
151
  def ndb
155
152
  AIXM.ndb(
156
153
  source: 'LF|GEN|0.0 FACTORY|0|0',
157
- region: 'LF',
158
154
  organisation: organisation,
159
155
  id: 'NNN',
160
156
  name: 'NDB NAVAID',
@@ -171,7 +167,6 @@ module AIXM
171
167
  def tacan
172
168
  AIXM.tacan(
173
169
  source: 'LF|GEN|0.0 FACTORY|0|0',
174
- region: 'LF',
175
170
  organisation: organisation,
176
171
  id: 'TTT',
177
172
  name: 'TACAN NAVAID',
@@ -187,7 +182,6 @@ module AIXM
187
182
  def vor
188
183
  AIXM.vor(
189
184
  source: 'LF|GEN|0.0 FACTORY|0|0',
190
- region: 'LF',
191
185
  organisation: organisation,
192
186
  id: 'VVV',
193
187
  name: 'VOR NAVAID',
@@ -205,7 +199,6 @@ module AIXM
205
199
  def vordme
206
200
  AIXM.vor(
207
201
  source: 'LF|GEN|0.0 FACTORY|0|0',
208
- region: 'LF',
209
202
  organisation: organisation,
210
203
  id: 'VDD',
211
204
  name: 'VOR/DME NAVAID',
@@ -224,7 +217,6 @@ module AIXM
224
217
  def vortac
225
218
  AIXM.vor(
226
219
  source: 'LF|GEN|0.0 FACTORY|0|0',
227
- region: 'LF',
228
220
  organisation: organisation,
229
221
  id: 'VTT',
230
222
  name: 'VORTAC NAVAID',
@@ -245,7 +237,6 @@ module AIXM
245
237
  def organisation
246
238
  AIXM.organisation(
247
239
  source: 'LF|GEN|0.0 FACTORY|0|0',
248
- region: 'LF',
249
240
  name: 'FRANCE',
250
241
  type: 'S'
251
242
  ).tap do |organisation|
@@ -259,7 +250,6 @@ module AIXM
259
250
  def unit
260
251
  AIXM.unit(
261
252
  source: 'LF|GEN|0.0 FACTORY|0|0',
262
- region: 'LF',
263
253
  organisation: organisation,
264
254
  name: 'PUJAUT TWR',
265
255
  type: :aerodrome_control_tower,
@@ -299,9 +289,8 @@ module AIXM
299
289
  def airport
300
290
  AIXM.airport(
301
291
  source: 'LF|GEN|0.0 FACTORY|0|0',
302
- region: 'LF',
303
292
  organisation: organisation,
304
- code: 'LFNT',
293
+ id: 'LFNT',
305
294
  name: 'Avignon-Pujaut',
306
295
  xy: AIXM.xy(lat: %q(43°59'46"N), long: %q(004°45'16"E))
307
296
  ).tap do |airport|
@@ -359,6 +348,7 @@ module AIXM
359
348
  def document
360
349
  time = Time.parse('2018-01-01 12:00:00 +0100')
361
350
  AIXM.document(
351
+ region: 'LF',
362
352
  namespace: '00000000-0000-0000-0000-000000000000',
363
353
  created_at: time,
364
354
  effective_at: time
@@ -7,6 +7,7 @@ describe AIXM::Component::Geometry do
7
7
  end
8
8
 
9
9
  it "must fail checks" do
10
+ subject.wont_be :point?
10
11
  subject.wont_be :circle?
11
12
  subject.wont_be :polygon?
12
13
  subject.wont_be :closed?
@@ -24,14 +25,27 @@ describe AIXM::Component::Geometry do
24
25
  end
25
26
  end
26
27
 
27
- it "must fail checks" do
28
+ it "must pass checks" do
29
+ subject.must_be :point?
28
30
  subject.wont_be :circle?
29
31
  subject.wont_be :polygon?
30
- subject.wont_be :closed?
32
+ subject.must_be :closed?
31
33
  end
32
34
 
33
- it "must fail to build AIXM" do
34
- -> { subject.to_xml }.must_raise AIXM::GeometryError
35
+ it "must return elements" do
36
+ subject.segments.count.must_equal 1
37
+ end
38
+
39
+ it "builds valid AIXM" do
40
+ AIXM.aixm!
41
+ subject.to_xml.must_equal <<~END
42
+ <Avx>
43
+ <codeType>GRC</codeType>
44
+ <geoLat>110000.00N</geoLat>
45
+ <geoLong>0220000.00E</geoLong>
46
+ <codeDatum>WGE</codeDatum>
47
+ </Avx>
48
+ END
35
49
  end
36
50
  end
37
51
 
@@ -44,6 +58,7 @@ describe AIXM::Component::Geometry do
44
58
  end
45
59
 
46
60
  it "must fail checks" do
61
+ subject.wont_be :point?
47
62
  subject.wont_be :circle?
48
63
  subject.wont_be :polygon?
49
64
  subject.wont_be :closed?
@@ -65,6 +80,7 @@ describe AIXM::Component::Geometry do
65
80
  end
66
81
 
67
82
  it "must pass checks" do
83
+ subject.wont_be :point?
68
84
  subject.wont_be :circle?
69
85
  subject.must_be :polygon?
70
86
  subject.must_be :closed?
@@ -115,6 +131,7 @@ describe AIXM::Component::Geometry do
115
131
  end
116
132
 
117
133
  it "must fail checks" do
134
+ subject.wont_be :point?
118
135
  subject.wont_be :circle?
119
136
  subject.wont_be :polygon?
120
137
  subject.wont_be :closed?
@@ -135,6 +152,7 @@ describe AIXM::Component::Geometry do
135
152
  end
136
153
 
137
154
  it "must pass checks" do
155
+ subject.wont_be :point?
138
156
  subject.wont_be :circle?
139
157
  subject.must_be :polygon?
140
158
  subject.must_be :closed?
@@ -176,6 +194,7 @@ describe AIXM::Component::Geometry do
176
194
  end
177
195
 
178
196
  it "must fail checks" do
197
+ subject.wont_be :point?
179
198
  subject.wont_be :circle?
180
199
  subject.wont_be :polygon?
181
200
  subject.wont_be :closed?
@@ -196,6 +215,7 @@ describe AIXM::Component::Geometry do
196
215
  end
197
216
 
198
217
  it "must pass checks" do
218
+ subject.wont_be :point?
199
219
  subject.wont_be :circle?
200
220
  subject.must_be :polygon?
201
221
  subject.must_be :closed?
@@ -238,6 +258,7 @@ describe AIXM::Component::Geometry do
238
258
  end
239
259
 
240
260
  it "must fail checks" do
261
+ subject.wont_be :point?
241
262
  subject.wont_be :circle?
242
263
  subject.wont_be :polygon?
243
264
  subject.wont_be :closed?
@@ -256,6 +277,7 @@ describe AIXM::Component::Geometry do
256
277
  end
257
278
 
258
279
  it "must pass checks" do
280
+ subject.wont_be :point?
259
281
  subject.must_be :circle?
260
282
  subject.wont_be :polygon?
261
283
  subject.must_be :closed?
@@ -285,6 +307,7 @@ describe AIXM::Component::Geometry do
285
307
  end
286
308
 
287
309
  it "must fail checks when additional elements are present" do
310
+ subject.wont_be :point?
288
311
  subject.wont_be :circle?
289
312
  subject.wont_be :polygon?
290
313
  subject.wont_be :closed?
@@ -95,7 +95,7 @@ describe AIXM::Component::Helipad do
95
95
  subject.to_xml.must_equal <<~END
96
96
  <Tla>
97
97
  <TlaUid>
98
- <AhpUid region="LF">
98
+ <AhpUid>
99
99
  <codeId>LFNT</codeId>
100
100
  </AhpUid>
101
101
  <txtDesig>H1</txtDesig>
@@ -121,7 +121,7 @@ describe AIXM::Component::Helipad do
121
121
  subject.to_xml.must_equal <<~END
122
122
  <Tla>
123
123
  <TlaUid>
124
- <AhpUid region="LF">
124
+ <AhpUid>
125
125
  <codeId>LFNT</codeId>
126
126
  </AhpUid>
127
127
  <txtDesig>H1</txtDesig>
@@ -23,12 +23,37 @@ describe AIXM::Component::Layer do
23
23
  end
24
24
  end
25
25
 
26
+ describe :location_indicator= do
27
+ it "fails on invalid values" do
28
+ [:foobar, 123, 'XXX', 'XXXXX'].wont_be_written_to subject, :location_indicator
29
+ end
30
+
31
+ it "accepts nil value" do
32
+ [nil].must_be_written_to subject, :location_indicator
33
+ end
34
+
35
+ it "upcases value" do
36
+ subject.tap { |s| s.location_indicator = 'lfbb' }.location_indicator.must_equal 'LFBB'
37
+ end
38
+ end
39
+
26
40
  describe :vertical_limits= do
27
41
  it "fails on invalid values" do
28
42
  [nil, :foobar, 123].wont_be_written_to subject, :vertical_limits
29
43
  end
30
44
  end
31
45
 
46
+ describe :activity= do
47
+ it "fails on invalid values" do
48
+ [:foobar, 123].wont_be_written_to subject, :activity
49
+ end
50
+
51
+ it "looks up valid values" do
52
+ subject.tap { |s| s.activity = :aerodrome_traffic }.activity.must_equal :aerodrome_traffic
53
+ subject.tap { |s| s.activity = :GLIDER }.activity.must_equal :gliding
54
+ end
55
+ end
56
+
32
57
  describe :timetable= do
33
58
  macro :timetable
34
59
  end
@@ -81,6 +106,8 @@ describe AIXM::Component::Layer do
81
106
  AIXM.ofmx!
82
107
  subject.to_xml.must_equal <<~END
83
108
  <codeClass>C</codeClass>
109
+ <codeLocInd>XXXX</codeLocInd>
110
+ <codeActivity>TFC-AD</codeActivity>
84
111
  <codeDistVerUpper>STD</codeDistVerUpper>
85
112
  <valDistVerUpper>65</valDistVerUpper>
86
113
  <uomDistVerUpper>FL</uomDistVerUpper>
@@ -96,7 +96,7 @@ describe AIXM::Component::Runway do
96
96
  subject.to_xml.must_equal <<~END
97
97
  <Rwy>
98
98
  <RwyUid>
99
- <AhpUid region="LF">
99
+ <AhpUid>
100
100
  <codeId>LFNT</codeId>
101
101
  </AhpUid>
102
102
  <txtDesig>16L/34R</txtDesig>
@@ -111,7 +111,7 @@ describe AIXM::Component::Runway do
111
111
  <Rdn>
112
112
  <RdnUid>
113
113
  <RwyUid>
114
- <AhpUid region="LF">
114
+ <AhpUid>
115
115
  <codeId>LFNT</codeId>
116
116
  </AhpUid>
117
117
  <txtDesig>16L/34R</txtDesig>
@@ -130,7 +130,7 @@ describe AIXM::Component::Runway do
130
130
  <RddUid>
131
131
  <RdnUid>
132
132
  <RwyUid>
133
- <AhpUid region="LF">
133
+ <AhpUid>
134
134
  <codeId>LFNT</codeId>
135
135
  </AhpUid>
136
136
  <txtDesig>16L/34R</txtDesig>
@@ -147,7 +147,7 @@ describe AIXM::Component::Runway do
147
147
  <Rdn>
148
148
  <RdnUid>
149
149
  <RwyUid>
150
- <AhpUid region="LF">
150
+ <AhpUid>
151
151
  <codeId>LFNT</codeId>
152
152
  </AhpUid>
153
153
  <txtDesig>16L/34R</txtDesig>
@@ -164,7 +164,7 @@ describe AIXM::Component::Runway do
164
164
  <RddUid>
165
165
  <RdnUid>
166
166
  <RwyUid>
167
- <AhpUid region="LF">
167
+ <AhpUid>
168
168
  <codeId>LFNT</codeId>
169
169
  </AhpUid>
170
170
  <txtDesig>16L/34R</txtDesig>
@@ -187,7 +187,7 @@ describe AIXM::Component::Runway do
187
187
  subject.to_xml.must_equal <<~END
188
188
  <Rwy>
189
189
  <RwyUid>
190
- <AhpUid region=\"LF\">
190
+ <AhpUid>
191
191
  <codeId>LFNT</codeId>
192
192
  </AhpUid>
193
193
  <txtDesig>16L/34R</txtDesig>
@@ -196,7 +196,7 @@ describe AIXM::Component::Runway do
196
196
  <Rdn>
197
197
  <RdnUid>
198
198
  <RwyUid>
199
- <AhpUid region=\"LF\">
199
+ <AhpUid>
200
200
  <codeId>LFNT</codeId>
201
201
  </AhpUid>
202
202
  <txtDesig>16L/34R</txtDesig>
@@ -215,7 +215,7 @@ describe AIXM::Component::Runway do
215
215
  <RddUid>
216
216
  <RdnUid>
217
217
  <RwyUid>
218
- <AhpUid region=\"LF\">
218
+ <AhpUid>
219
219
  <codeId>LFNT</codeId>
220
220
  </AhpUid>
221
221
  <txtDesig>16L/34R</txtDesig>
@@ -232,7 +232,7 @@ describe AIXM::Component::Runway do
232
232
  <Rdn>
233
233
  <RdnUid>
234
234
  <RwyUid>
235
- <AhpUid region=\"LF\">
235
+ <AhpUid>
236
236
  <codeId>LFNT</codeId>
237
237
  </AhpUid>
238
238
  <txtDesig>16L/34R</txtDesig>
@@ -249,7 +249,7 @@ describe AIXM::Component::Runway do
249
249
  <RddUid>
250
250
  <RdnUid>
251
251
  <RwyUid>
252
- <AhpUid region=\"LF\">
252
+ <AhpUid>
253
253
  <codeId>LFNT</codeId>
254
254
  </AhpUid>
255
255
  <txtDesig>16L/34R</txtDesig>
@@ -342,7 +342,7 @@ describe AIXM::Component::Runway::Direction do
342
342
  <Rdn>
343
343
  <RdnUid>
344
344
  <RwyUid>
345
- <AhpUid region="LF">
345
+ <AhpUid>
346
346
  <codeId>LFNT</codeId>
347
347
  </AhpUid>
348
348
  <txtDesig>16L/34R</txtDesig>
@@ -361,7 +361,7 @@ describe AIXM::Component::Runway::Direction do
361
361
  <RddUid>
362
362
  <RdnUid>
363
363
  <RwyUid>
364
- <AhpUid region="LF">
364
+ <AhpUid>
365
365
  <codeId>LFNT</codeId>
366
366
  </AhpUid>
367
367
  <txtDesig>16L/34R</txtDesig>
@@ -385,7 +385,7 @@ describe AIXM::Component::Runway::Direction do
385
385
  <Rdn>
386
386
  <RdnUid>
387
387
  <RwyUid>
388
- <AhpUid region="LF">
388
+ <AhpUid>
389
389
  <codeId>LFNT</codeId>
390
390
  </AhpUid>
391
391
  <txtDesig>16L/34R</txtDesig>
@@ -82,7 +82,7 @@ describe AIXM::Document do
82
82
  it "builds correct AIXM" do
83
83
  subject.to_xml.must_equal <<~"END"
84
84
  <?xml version="1.0" encoding="UTF-8"?>
85
- <AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5" origin="rubygem aixm-0.3.0" created="2018-01-01T12:00:00+01:00" effective="2018-01-01T12:00:00+01:00">
85
+ <AIXM-Snapshot xmlns:xsi="http://www.aixm.aero/schema/4.5/AIXM-Snapshot.xsd" version="4.5" origin="rubygem aixm-#{AIXM::VERSION}" created="2018-01-01T12:00:00+01:00" effective="2018-01-01T12:00:00+01:00">
86
86
  <!-- Organisation: FRANCE -->
87
87
  <Org>
88
88
  <OrgUid>
@@ -306,6 +306,8 @@ describe AIXM::Document do
306
306
  <txtLocalType>POLYGON</txtLocalType>
307
307
  <txtName>POLYGON AIRSPACE</txtName>
308
308
  <codeClass>C</codeClass>
309
+ <codeLocInd>XXXX</codeLocInd>
310
+ <codeActivity>TFC-AD</codeActivity>
309
311
  <codeDistVerUpper>STD</codeDistVerUpper>
310
312
  <valDistVerUpper>65</valDistVerUpper>
311
313
  <uomDistVerUpper>FL</uomDistVerUpper>
@@ -363,6 +365,8 @@ describe AIXM::Document do
363
365
  <txtLocalType>CIRCLE</txtLocalType>
364
366
  <txtName>CIRCLE AIRSPACE</txtName>
365
367
  <codeClass>C</codeClass>
368
+ <codeLocInd>XXXX</codeLocInd>
369
+ <codeActivity>TFC-AD</codeActivity>
366
370
  <codeDistVerUpper>STD</codeDistVerUpper>
367
371
  <valDistVerUpper>65</valDistVerUpper>
368
372
  <uomDistVerUpper>FL</uomDistVerUpper>
@@ -420,6 +424,8 @@ describe AIXM::Document do
420
424
  </OrgUid>
421
425
  <txtName>DME NAVAID</txtName>
422
426
  <codeChannel>95X</codeChannel>
427
+ <valGhostFreq>114.8</valGhostFreq>
428
+ <uomGhostFreq>MHZ</uomGhostFreq>
423
429
  <codeDatum>WGE</codeDatum>
424
430
  <valElev>500</valElev>
425
431
  <uomDistVer>FT</uomDistVer>
@@ -629,10 +635,10 @@ describe AIXM::Document do
629
635
  it "builds correct OFMX" do
630
636
  subject.to_xml.must_equal <<~"END"
631
637
  <?xml version="1.0" encoding="UTF-8"?>
632
- <OFMX-Snapshot xmlns:xsi="http://openflightmaps.org/schema/0/OFMX-Snapshot.xsd" version="0" origin="rubygem aixm-0.3.0" namespace="00000000-0000-0000-0000-000000000000" created="2018-01-01T12:00:00+01:00" effective="2018-01-01T12:00:00+01:00">
638
+ <OFMX-Snapshot xmlns:xsi="http://openflightmaps.org/schema/0/OFMX-Snapshot.xsd" version="0" origin="rubygem aixm-#{AIXM::VERSION}" region="LF" namespace="00000000-0000-0000-0000-000000000000" created="2018-01-01T12:00:00+01:00" effective="2018-01-01T12:00:00+01:00">
633
639
  <!-- Organisation: FRANCE -->
634
640
  <Org source="LF|GEN|0.0 FACTORY|0|0">
635
- <OrgUid region="LF">
641
+ <OrgUid>
636
642
  <txtName>FRANCE</txtName>
637
643
  </OrgUid>
638
644
  <codeId>LF</codeId>
@@ -641,13 +647,13 @@ describe AIXM::Document do
641
647
  </Org>
642
648
  <!-- Unit: PUJAUT TWR -->
643
649
  <Uni source="LF|GEN|0.0 FACTORY|0|0">
644
- <UniUid region="LF">
650
+ <UniUid>
645
651
  <txtName>PUJAUT TWR</txtName>
646
652
  </UniUid>
647
- <OrgUid region="LF">
653
+ <OrgUid>
648
654
  <txtName>FRANCE</txtName>
649
655
  </OrgUid>
650
- <AhpUid region="LF">
656
+ <AhpUid>
651
657
  <codeId>LFNT</codeId>
652
658
  </AhpUid>
653
659
  <codeType>TWR</codeType>
@@ -656,7 +662,7 @@ describe AIXM::Document do
656
662
  </Uni>
657
663
  <Ser>
658
664
  <SerUid>
659
- <UniUid region="LF">
665
+ <UniUid>
660
666
  <txtName>PUJAUT TWR</txtName>
661
667
  </UniUid>
662
668
  <codeType>APP</codeType>
@@ -670,7 +676,7 @@ describe AIXM::Document do
670
676
  <Fqy>
671
677
  <FqyUid>
672
678
  <SerUid>
673
- <UniUid region="LF">
679
+ <UniUid>
674
680
  <txtName>PUJAUT TWR</txtName>
675
681
  </UniUid>
676
682
  <codeType>APP</codeType>
@@ -695,10 +701,10 @@ describe AIXM::Document do
695
701
  </Fqy>
696
702
  <!-- Airport: LFNT AVIGNON-PUJAUT -->
697
703
  <Ahp source="LF|GEN|0.0 FACTORY|0|0">
698
- <AhpUid region="LF">
704
+ <AhpUid>
699
705
  <codeId>LFNT</codeId>
700
706
  </AhpUid>
701
- <OrgUid region="LF">
707
+ <OrgUid>
702
708
  <txtName>FRANCE</txtName>
703
709
  </OrgUid>
704
710
  <txtName>AVIGNON-PUJAUT</txtName>
@@ -717,7 +723,7 @@ describe AIXM::Document do
717
723
  </Ahp>
718
724
  <Rwy>
719
725
  <RwyUid>
720
- <AhpUid region="LF">
726
+ <AhpUid>
721
727
  <codeId>LFNT</codeId>
722
728
  </AhpUid>
723
729
  <txtDesig>16L/34R</txtDesig>
@@ -732,7 +738,7 @@ describe AIXM::Document do
732
738
  <Rdn>
733
739
  <RdnUid>
734
740
  <RwyUid>
735
- <AhpUid region="LF">
741
+ <AhpUid>
736
742
  <codeId>LFNT</codeId>
737
743
  </AhpUid>
738
744
  <txtDesig>16L/34R</txtDesig>
@@ -751,7 +757,7 @@ describe AIXM::Document do
751
757
  <RddUid>
752
758
  <RdnUid>
753
759
  <RwyUid>
754
- <AhpUid region="LF">
760
+ <AhpUid>
755
761
  <codeId>LFNT</codeId>
756
762
  </AhpUid>
757
763
  <txtDesig>16L/34R</txtDesig>
@@ -768,7 +774,7 @@ describe AIXM::Document do
768
774
  <Rdn>
769
775
  <RdnUid>
770
776
  <RwyUid>
771
- <AhpUid region="LF">
777
+ <AhpUid>
772
778
  <codeId>LFNT</codeId>
773
779
  </AhpUid>
774
780
  <txtDesig>16L/34R</txtDesig>
@@ -785,7 +791,7 @@ describe AIXM::Document do
785
791
  <RddUid>
786
792
  <RdnUid>
787
793
  <RwyUid>
788
- <AhpUid region="LF">
794
+ <AhpUid>
789
795
  <codeId>LFNT</codeId>
790
796
  </AhpUid>
791
797
  <txtDesig>16L/34R</txtDesig>
@@ -801,7 +807,7 @@ describe AIXM::Document do
801
807
  </Rdd>
802
808
  <Tla>
803
809
  <TlaUid>
804
- <AhpUid region="LF">
810
+ <AhpUid>
805
811
  <codeId>LFNT</codeId>
806
812
  </AhpUid>
807
813
  <txtDesig>H1</txtDesig>
@@ -820,7 +826,7 @@ describe AIXM::Document do
820
826
  </Tla>
821
827
  <Ahu>
822
828
  <AhuUid>
823
- <AhpUid region="LF">
829
+ <AhpUid>
824
830
  <codeId>LFNT</codeId>
825
831
  </AhpUid>
826
832
  </AhuUid>
@@ -847,13 +853,15 @@ describe AIXM::Document do
847
853
  </Ahu>
848
854
  <!-- Airspace: [D] POLYGON AIRSPACE -->
849
855
  <Ase source="LF|GEN|0.0 FACTORY|0|0">
850
- <AseUid region="LF">
856
+ <AseUid>
851
857
  <codeType>D</codeType>
852
858
  <codeId>PA</codeId>
853
859
  </AseUid>
854
860
  <txtLocalType>POLYGON</txtLocalType>
855
861
  <txtName>POLYGON AIRSPACE</txtName>
856
862
  <codeClass>C</codeClass>
863
+ <codeLocInd>XXXX</codeLocInd>
864
+ <codeActivity>TFC-AD</codeActivity>
857
865
  <codeDistVerUpper>STD</codeDistVerUpper>
858
866
  <valDistVerUpper>65</valDistVerUpper>
859
867
  <uomDistVerUpper>FL</uomDistVerUpper>
@@ -874,7 +882,7 @@ describe AIXM::Document do
874
882
  </Ase>
875
883
  <Abd>
876
884
  <AbdUid>
877
- <AseUid region="LF">
885
+ <AseUid>
878
886
  <codeType>D</codeType>
879
887
  <codeId>PA</codeId>
880
888
  </AseUid>
@@ -905,13 +913,15 @@ describe AIXM::Document do
905
913
  </Abd>
906
914
  <!-- Airspace: [D] CIRCLE AIRSPACE -->
907
915
  <Ase source="LF|GEN|0.0 FACTORY|0|0">
908
- <AseUid region="LF">
916
+ <AseUid>
909
917
  <codeType>D</codeType>
910
918
  <codeId>CA</codeId>
911
919
  </AseUid>
912
920
  <txtLocalType>CIRCLE</txtLocalType>
913
921
  <txtName>CIRCLE AIRSPACE</txtName>
914
922
  <codeClass>C</codeClass>
923
+ <codeLocInd>XXXX</codeLocInd>
924
+ <codeActivity>TFC-AD</codeActivity>
915
925
  <codeDistVerUpper>STD</codeDistVerUpper>
916
926
  <valDistVerUpper>65</valDistVerUpper>
917
927
  <uomDistVerUpper>FL</uomDistVerUpper>
@@ -932,7 +942,7 @@ describe AIXM::Document do
932
942
  </Ase>
933
943
  <Abd>
934
944
  <AbdUid>
935
- <AseUid region="LF">
945
+ <AseUid>
936
946
  <codeType>D</codeType>
937
947
  <codeId>CA</codeId>
938
948
  </AseUid>
@@ -948,7 +958,7 @@ describe AIXM::Document do
948
958
  </Abd>
949
959
  <!-- NavigationalAid: [DesignatedPoint:ICAO] DESIGNATED POINT NAVAID -->
950
960
  <Dpn source="LF|GEN|0.0 FACTORY|0|0">
951
- <DpnUid region="LF">
961
+ <DpnUid>
952
962
  <codeId>DDD</codeId>
953
963
  <geoLat>47.85916667N</geoLat>
954
964
  <geoLong>007.56000000E</geoLong>
@@ -960,16 +970,18 @@ describe AIXM::Document do
960
970
  </Dpn>
961
971
  <!-- NavigationalAid: [DME] DME NAVAID -->
962
972
  <Dme source="LF|GEN|0.0 FACTORY|0|0">
963
- <DmeUid region="LF">
973
+ <DmeUid>
964
974
  <codeId>MMM</codeId>
965
975
  <geoLat>47.85916667N</geoLat>
966
976
  <geoLong>007.56000000E</geoLong>
967
977
  </DmeUid>
968
- <OrgUid region="LF">
978
+ <OrgUid>
969
979
  <txtName>FRANCE</txtName>
970
980
  </OrgUid>
971
981
  <txtName>DME NAVAID</txtName>
972
982
  <codeChannel>95X</codeChannel>
983
+ <valGhostFreq>114.8</valGhostFreq>
984
+ <uomGhostFreq>MHZ</uomGhostFreq>
973
985
  <codeDatum>WGE</codeDatum>
974
986
  <valElev>500</valElev>
975
987
  <uomDistVer>FT</uomDistVer>
@@ -980,12 +992,12 @@ describe AIXM::Document do
980
992
  </Dme>
981
993
  <!-- NavigationalAid: [Marker:O] MARKER NAVAID -->
982
994
  <Mkr source="LF|GEN|0.0 FACTORY|0|0">
983
- <MkrUid region="LF">
995
+ <MkrUid>
984
996
  <codeId>---</codeId>
985
997
  <geoLat>47.85916667N</geoLat>
986
998
  <geoLong>007.56000000E</geoLong>
987
999
  </MkrUid>
988
- <OrgUid region="LF">
1000
+ <OrgUid>
989
1001
  <txtName>FRANCE</txtName>
990
1002
  </OrgUid>
991
1003
  <codePsnIls>O</codePsnIls>
@@ -1002,12 +1014,12 @@ describe AIXM::Document do
1002
1014
  </Mkr>
1003
1015
  <!-- NavigationalAid: [NDB:B] NDB NAVAID -->
1004
1016
  <Ndb source="LF|GEN|0.0 FACTORY|0|0">
1005
- <NdbUid region="LF">
1017
+ <NdbUid>
1006
1018
  <codeId>NNN</codeId>
1007
1019
  <geoLat>47.85916667N</geoLat>
1008
1020
  <geoLong>007.56000000E</geoLong>
1009
1021
  </NdbUid>
1010
- <OrgUid region="LF">
1022
+ <OrgUid>
1011
1023
  <txtName>FRANCE</txtName>
1012
1024
  </OrgUid>
1013
1025
  <txtName>NDB NAVAID</txtName>
@@ -1024,16 +1036,18 @@ describe AIXM::Document do
1024
1036
  </Ndb>
1025
1037
  <!-- NavigationalAid: [TACAN] TACAN NAVAID -->
1026
1038
  <Tcn source="LF|GEN|0.0 FACTORY|0|0">
1027
- <TcnUid region="LF">
1039
+ <TcnUid>
1028
1040
  <codeId>TTT</codeId>
1029
1041
  <geoLat>47.85916667N</geoLat>
1030
1042
  <geoLong>007.56000000E</geoLong>
1031
1043
  </TcnUid>
1032
- <OrgUid region="LF">
1044
+ <OrgUid>
1033
1045
  <txtName>FRANCE</txtName>
1034
1046
  </OrgUid>
1035
1047
  <txtName>TACAN NAVAID</txtName>
1036
1048
  <codeChannel>29X</codeChannel>
1049
+ <valGhostFreq>109.2</valGhostFreq>
1050
+ <uomGhostFreq>MHZ</uomGhostFreq>
1037
1051
  <codeDatum>WGE</codeDatum>
1038
1052
  <valElev>500</valElev>
1039
1053
  <uomDistVer>FT</uomDistVer>
@@ -1044,12 +1058,12 @@ describe AIXM::Document do
1044
1058
  </Tcn>
1045
1059
  <!-- NavigationalAid: [VOR:VOR] VOR NAVAID -->
1046
1060
  <Vor source="LF|GEN|0.0 FACTORY|0|0">
1047
- <VorUid region="LF">
1061
+ <VorUid>
1048
1062
  <codeId>VVV</codeId>
1049
1063
  <geoLat>47.85916667N</geoLat>
1050
1064
  <geoLong>007.56000000E</geoLong>
1051
1065
  </VorUid>
1052
- <OrgUid region="LF">
1066
+ <OrgUid>
1053
1067
  <txtName>FRANCE</txtName>
1054
1068
  </OrgUid>
1055
1069
  <txtName>VOR NAVAID</txtName>
@@ -1067,12 +1081,12 @@ describe AIXM::Document do
1067
1081
  </Vor>
1068
1082
  <!-- NavigationalAid: [VOR:VOR] VOR/DME NAVAID -->
1069
1083
  <Vor source="LF|GEN|0.0 FACTORY|0|0">
1070
- <VorUid region="LF">
1084
+ <VorUid>
1071
1085
  <codeId>VDD</codeId>
1072
1086
  <geoLat>47.85916667N</geoLat>
1073
1087
  <geoLong>007.56000000E</geoLong>
1074
1088
  </VorUid>
1075
- <OrgUid region="LF">
1089
+ <OrgUid>
1076
1090
  <txtName>FRANCE</txtName>
1077
1091
  </OrgUid>
1078
1092
  <txtName>VOR/DME NAVAID</txtName>
@@ -1090,15 +1104,15 @@ describe AIXM::Document do
1090
1104
  </Vor>
1091
1105
  <!-- NavigationalAid: [DME] VOR/DME NAVAID -->
1092
1106
  <Dme>
1093
- <DmeUid region="LF">
1107
+ <DmeUid>
1094
1108
  <codeId>VDD</codeId>
1095
1109
  <geoLat>47.85916667N</geoLat>
1096
1110
  <geoLong>007.56000000E</geoLong>
1097
1111
  </DmeUid>
1098
- <OrgUid region="LF">
1112
+ <OrgUid>
1099
1113
  <txtName>FRANCE</txtName>
1100
1114
  </OrgUid>
1101
- <VorUid region="LF">
1115
+ <VorUid>
1102
1116
  <codeId>VDD</codeId>
1103
1117
  <geoLat>47.85916667N</geoLat>
1104
1118
  <geoLong>007.56000000E</geoLong>
@@ -1115,12 +1129,12 @@ describe AIXM::Document do
1115
1129
  </Dme>
1116
1130
  <!-- NavigationalAid: [VOR:VOR] VORTAC NAVAID -->
1117
1131
  <Vor source="LF|GEN|0.0 FACTORY|0|0">
1118
- <VorUid region="LF">
1132
+ <VorUid>
1119
1133
  <codeId>VTT</codeId>
1120
1134
  <geoLat>47.85916667N</geoLat>
1121
1135
  <geoLong>007.56000000E</geoLong>
1122
1136
  </VorUid>
1123
- <OrgUid region="LF">
1137
+ <OrgUid>
1124
1138
  <txtName>FRANCE</txtName>
1125
1139
  </OrgUid>
1126
1140
  <txtName>VORTAC NAVAID</txtName>
@@ -1138,15 +1152,15 @@ describe AIXM::Document do
1138
1152
  </Vor>
1139
1153
  <!-- NavigationalAid: [TACAN] VORTAC NAVAID -->
1140
1154
  <Tcn>
1141
- <TcnUid region="LF">
1155
+ <TcnUid>
1142
1156
  <codeId>VTT</codeId>
1143
1157
  <geoLat>47.85916667N</geoLat>
1144
1158
  <geoLong>007.56000000E</geoLong>
1145
1159
  </TcnUid>
1146
- <OrgUid region="LF">
1160
+ <OrgUid>
1147
1161
  <txtName>FRANCE</txtName>
1148
1162
  </OrgUid>
1149
- <VorUid region="LF">
1163
+ <VorUid>
1150
1164
  <codeId>VTT</codeId>
1151
1165
  <geoLat>47.85916667N</geoLat>
1152
1166
  <geoLong>007.56000000E</geoLong>