aixm 0.3.0 → 0.3.1

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.
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>