aixm 0.2.3 → 0.3.0

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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.yardopts +3 -0
  5. data/CHANGELOG.md +34 -14
  6. data/Guardfile +1 -0
  7. data/README.md +64 -257
  8. data/lib/aixm.rb +16 -7
  9. data/lib/aixm/component.rb +6 -0
  10. data/lib/aixm/component/frequency.rb +135 -0
  11. data/lib/aixm/component/geometry.rb +34 -23
  12. data/lib/aixm/component/geometry/arc.rb +37 -22
  13. data/lib/aixm/component/geometry/border.rb +29 -20
  14. data/lib/aixm/component/geometry/circle.rb +39 -22
  15. data/lib/aixm/component/geometry/point.rb +29 -13
  16. data/lib/aixm/component/helipad.rb +154 -0
  17. data/lib/aixm/component/layer.rb +91 -0
  18. data/lib/aixm/component/runway.rb +294 -0
  19. data/lib/aixm/component/service.rb +170 -0
  20. data/lib/aixm/component/timetable.rb +65 -0
  21. data/lib/aixm/component/vertical_limits.rb +65 -29
  22. data/lib/aixm/config.rb +87 -0
  23. data/lib/aixm/document.rb +66 -42
  24. data/lib/aixm/errors.rb +11 -0
  25. data/lib/aixm/f.rb +34 -20
  26. data/lib/aixm/feature.rb +38 -0
  27. data/lib/aixm/feature/airport.rb +473 -0
  28. data/lib/aixm/feature/airspace.rb +145 -92
  29. data/lib/aixm/feature/navigational_aid.rb +94 -0
  30. data/lib/aixm/feature/navigational_aid/designated_point.rb +50 -54
  31. data/lib/aixm/feature/navigational_aid/dme.rb +48 -40
  32. data/lib/aixm/feature/navigational_aid/marker.rb +55 -45
  33. data/lib/aixm/feature/navigational_aid/ndb.rb +54 -50
  34. data/lib/aixm/feature/navigational_aid/tacan.rb +38 -31
  35. data/lib/aixm/feature/navigational_aid/vor.rb +84 -76
  36. data/lib/aixm/feature/organisation.rb +97 -0
  37. data/lib/aixm/feature/unit.rb +152 -0
  38. data/lib/aixm/refinements.rb +132 -47
  39. data/lib/aixm/shortcuts.rb +11 -6
  40. data/lib/aixm/version.rb +1 -1
  41. data/lib/aixm/xy.rb +64 -20
  42. data/lib/aixm/z.rb +51 -22
  43. data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-DataTypes.xsd +0 -0
  44. data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Features.xsd +0 -0
  45. data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Snapshot.xsd +0 -0
  46. data/schemas/ofmx/0/OFMX-DataTypes.xsd +5077 -0
  47. data/schemas/ofmx/0/OFMX-Features.xsd +9955 -0
  48. data/schemas/ofmx/0/OFMX-Snapshot.xsd +217 -0
  49. data/spec/factory.rb +209 -33
  50. data/spec/lib/aixm/component/frequency_spec.rb +75 -0
  51. data/spec/lib/aixm/component/geometry/arc_spec.rb +28 -22
  52. data/spec/lib/aixm/component/geometry/border_spec.rb +23 -20
  53. data/spec/lib/aixm/component/geometry/circle_spec.rb +31 -22
  54. data/spec/lib/aixm/component/geometry/point_spec.rb +11 -14
  55. data/spec/lib/aixm/component/geometry_spec.rb +150 -69
  56. data/spec/lib/aixm/component/helipad_spec.rb +136 -0
  57. data/spec/lib/aixm/component/layer_spec.rb +110 -0
  58. data/spec/lib/aixm/component/runway_spec.rb +402 -0
  59. data/spec/lib/aixm/component/service_spec.rb +61 -0
  60. data/spec/lib/aixm/component/timetable_spec.rb +49 -0
  61. data/spec/lib/aixm/component/vertical_limits_spec.rb +39 -20
  62. data/spec/lib/aixm/config_spec.rb +41 -0
  63. data/spec/lib/aixm/document_spec.rb +637 -147
  64. data/spec/lib/aixm/errors_spec.rb +14 -0
  65. data/spec/lib/aixm/f_spec.rb +17 -10
  66. data/spec/lib/aixm/feature/airport_spec.rb +546 -0
  67. data/spec/lib/aixm/feature/airspace_spec.rb +349 -226
  68. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +47 -36
  69. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +61 -36
  70. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +61 -113
  71. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +65 -79
  72. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +57 -36
  73. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +86 -112
  74. data/spec/lib/aixm/feature/navigational_aid_spec.rb +52 -0
  75. data/spec/lib/aixm/feature/organisation_spec.rb +77 -0
  76. data/spec/lib/aixm/feature/unit_spec.rb +227 -0
  77. data/spec/lib/aixm/feature_spec.rb +58 -0
  78. data/spec/lib/aixm/refinements_spec.rb +187 -178
  79. data/spec/lib/aixm/xy_spec.rb +45 -34
  80. data/spec/lib/aixm/z_spec.rb +19 -21
  81. data/spec/macros/organisation.rb +11 -0
  82. data/spec/macros/remarks.rb +12 -0
  83. data/spec/macros/timetable.rb +11 -0
  84. data/spec/macros/xy.rb +11 -0
  85. data/spec/macros/z_qnh.rb +11 -0
  86. data/spec/spec_helper.rb +26 -0
  87. metadata +60 -19
  88. data/lib/aixm/base.rb +0 -10
  89. data/lib/aixm/component/base.rb +0 -6
  90. data/lib/aixm/component/class_layer.rb +0 -46
  91. data/lib/aixm/component/geometry/base.rb +0 -8
  92. data/lib/aixm/component/schedule.rb +0 -43
  93. data/lib/aixm/feature/base.rb +0 -6
  94. data/lib/aixm/feature/navigational_aid/base.rb +0 -79
  95. data/spec/lib/aixm/component/class_layer_spec.rb +0 -74
  96. data/spec/lib/aixm/component/schedule_spec.rb +0 -33
  97. data/spec/lib/aixm/feature/navigational_aid/base_spec.rb +0 -41
@@ -0,0 +1,217 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ ********************************************************************************
4
+
5
+ OFMX 0.1.0 - open flightmaps exchange format
6
+
7
+ This is a fork of AIXM 4.5 to accomodate extensions and backports for
8
+ open flightmaps.
9
+
10
+ AIXM: copyright (c) 2006, EUROCONTROL (BSD license)
11
+ OFMX: https://openflightmaps.org/live/downloads/20150306-GUL.pdf
12
+
13
+ Redistribution and use in source and binary forms, with or without modification,
14
+ are permitted provided that the following conditions are met:
15
+
16
+ * Redistributions of source code must retain the above copyright notice, this
17
+ list of conditions and the following disclaimer.
18
+ * Redistributions in binary form must reproduce the above copyright notice,
19
+ this list of conditions and the following disclaimer in the documentation
20
+ and/or other materials provided with the distribution.
21
+ * Neither the name of EUROCONTROL nor the names of its contributors may be
22
+ used to endorse or promote products derived from this software without
23
+ specific prior written permission.
24
+
25
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
29
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+
36
+ ********************************************************************************
37
+ -->
38
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
39
+ <xsd:annotation>
40
+ <xsd:documentation>Version: 4.5-1</xsd:documentation>
41
+ </xsd:annotation>
42
+ <xsd:include schemaLocation="OFMX-Features.xsd"/>
43
+ <xsd:attributeGroup name="Changes"/>
44
+ <xsd:element name="OFMX-Snapshot">
45
+ <xsd:complexType>
46
+ <xsd:choice maxOccurs="unbounded">
47
+ <xsd:element name="Aas" type="AirspaceAssociationType"/>
48
+ <xsd:element name="Abd" type="AirspaceBorderType"/>
49
+ <xsd:element name="Acr" type="AirspaceCorridorType"/>
50
+ <xsd:element name="Adg" type="AirspaceDerivedGeometryType"/>
51
+ <xsd:element name="Aga" type="GroundServiceAddressType"/>
52
+ <xsd:element name="Agl" type="AeronauticalGroundLightType"/>
53
+ <xsd:element name="Aha" type="AerodromeHeliportAddressType"/>
54
+ <xsd:element name="Ahc" type="AerodromeHeliportCollocationType"/>
55
+ <xsd:element name="Aho" type="AerodromeHeliportObstacleType"/>
56
+ <xsd:element name="Ahp" type="AerodromeHeliportType"/>
57
+ <xsd:element name="Ahs" type="GroundServiceType"/>
58
+ <xsd:element name="Ahu" type="AerodromeHeliportUsageType"/>
59
+ <xsd:element name="Ain" type="NavaidAngularReferenceType"/>
60
+ <xsd:element name="Als" type="ApronLightingSystemType"/>
61
+ <xsd:element name="Ana" type="AerodromeHeliportNavaidType"/>
62
+ <xsd:element name="Apg" type="ApronGeometryType"/>
63
+ <xsd:element name="Apn" type="ApronType"/>
64
+ <xsd:element name="Ase" type="AirspaceType"/>
65
+ <xsd:element name="Din" type="NavaidDistanceIndicationType"/>
66
+ <xsd:element name="Dli" type="DmeUsageLimitationType"/>
67
+ <xsd:element name="Dme" type="DmeType"/>
68
+ <xsd:element name="Dpn" type="DesignatedPointType"/>
69
+ <xsd:element name="Fao" type="FatoOldType">
70
+ <xsd:annotation>
71
+ <xsd:appinfo>DEPRECATED-4.5</xsd:appinfo>
72
+ <xsd:documentation>[Deprecated]</xsd:documentation>
73
+ </xsd:annotation>
74
+ </xsd:element>
75
+ <xsd:element name="Fto" type="FatoType"/>
76
+ <xsd:element name="Fcp" type="FatoCentreLinePositionType"/>
77
+ <xsd:element name="Fda" type="FatoDirectionApproachLightingType"/>
78
+ <xsd:element name="Fdd" type="FatoDirectionDeclaredDistanceType"/>
79
+ <xsd:element name="Fdn" type="FatoDirectionType"/>
80
+ <xsd:element name="Fdo" type="FatoDirectionObstacleType"/>
81
+ <xsd:element name="Fds" type="FatoDirectionStarType"/>
82
+ <xsd:element name="Fls" type="FatoLightingSystemType"/>
83
+ <xsd:element name="Fpa" type="FatoProtectionAreaType"/>
84
+ <xsd:element name="Fpg" type="FatoProtectionAreaGeometryType"/>
85
+ <xsd:element name="Fqy" type="FrequencyType"/>
86
+ <xsd:element name="Ful" type="FuelType"/>
87
+ <xsd:element name="Gbr" type="GeographicalBorderType"/>
88
+ <xsd:element name="Gsd" type="GateStandType"/>
89
+ <xsd:element name="Hpe" type="HoldingProcedureType"/>
90
+ <xsd:element name="Iap" type="InstrumentApproachType"/>
91
+ <xsd:element name="Ils" type="IlsType"/>
92
+ <xsd:element name="Iue" type="InstrumentApproachUsageConditionType"/>
93
+ <xsd:element name="Mgp" type="MsaGroupType"/>
94
+ <xsd:element name="Mkr" type="MkrType"/>
95
+ <xsd:element name="Mls" type="MlsType"/>
96
+ <xsd:element name="Ndb" type="NdbType"/>
97
+ <xsd:element name="Nli" type="NdbUsageLimitationType"/>
98
+ <xsd:element name="Nsc" type="CheckpointType"/>
99
+ <xsd:element name="Ntg" type="NitrogenType"/>
100
+ <xsd:element name="Oaa" type="OrganisationAuthorityAddressType"/>
101
+ <xsd:element name="Oae" type="AirspaceObstacleType"/>
102
+ <xsd:element name="Oas" type="OrganisationAuthorityAssociationType"/>
103
+ <xsd:element name="Obs" type="ObstacleType"/>
104
+ <xsd:element name="Ofa" type="AirspaceAuthorityType"/>
105
+ <xsd:element name="Oil" type="OilType"/>
106
+ <xsd:element name="Org" type="OrganisationAuthorityType"/>
107
+ <xsd:element name="Oxg" type="OxygenType"/>
108
+ <xsd:element name="Pfy" type="PassengerFacilityType"/>
109
+ <xsd:element name="Plb" type="CruisingLevelsTableType"/>
110
+ <xsd:element name="Plc" type="CruisingLevelsColumnType"/>
111
+ <xsd:element name="Rcp" type="RunwayCentreLinePositionType"/>
112
+ <xsd:element name="Rda" type="RunwayDirectionApproachLightingSystemType"/>
113
+ <xsd:element name="Rdd" type="RunwayDirectionDeclaredDistanceType"/>
114
+ <xsd:element name="Rdn" type="RunwayDirectionType"/>
115
+ <xsd:element name="Rdo" type="RunwayDirectionObstacleType"/>
116
+ <xsd:element name="Rds" type="RunwayDirectionStarType"/>
117
+ <xsd:element name="Rls" type="RunwayDirectionLightingSystemType"/>
118
+ <xsd:element name="Rpa" type="RunwayProtectionAreaType"/>
119
+ <xsd:element name="Rpg" type="RunwayProtectionAreaGeometryType"/>
120
+ <xsd:element name="Rsg" type="RouteSegmentType"/>
121
+ <xsd:element name="Rsu" type="RouteSegmentUsageType"/>
122
+ <xsd:element name="Rte" type="EnrouteRouteType"/>
123
+ <xsd:element name="Rwy" type="RunwayType"/>
124
+ <xsd:element name="Sae" type="AirspaceServiceType"/>
125
+ <xsd:element name="Sah" type="AerodromeHeliportServiceType"/>
126
+ <xsd:element name="Ser" type="ServiceType"/>
127
+ <xsd:element name="Shp" type="HoldingProcedureServiceType"/>
128
+ <xsd:element name="Sia" type="StarType"/>
129
+ <xsd:element name="Sid" type="SidType"/>
130
+ <xsd:element name="Sip" type="InstrumentApproachServiceType"/>
131
+ <xsd:element name="Sns" type="SpecialNavigationSystemStationType"/>
132
+ <xsd:element name="Sny" type="SpecialNavigationSystemType"/>
133
+ <xsd:element name="Spa" type="SignificantPointAirspaceType"/>
134
+ <xsd:element name="Spd" type="SpecialDateType"/>
135
+ <xsd:element name="Srs" type="RouteSegmentServiceType"/>
136
+ <xsd:element name="Ssd" type="SidServiceType"/>
137
+ <xsd:element name="Sse" type="StarUsageType"/>
138
+ <xsd:element name="Ssr" type="StarServiceType"/>
139
+ <xsd:element name="Sue" type="SidUsageType"/>
140
+ <xsd:element name="Swy" type="StopwayType"/>
141
+ <xsd:element name="Tcn" type="TacanType"/>
142
+ <xsd:element name="Tcp" type="TaxiwayCentreLinePositionType"/>
143
+ <xsd:element name="Tfr" type="TrafficFlowRestrictionType"/>
144
+ <xsd:element name="Thp" type="TaxiwayHoldingPositionType"/>
145
+ <xsd:element name="Tla" type="TlofType"/>
146
+ <xsd:element name="Tlg" type="TlofGeometryType"/>
147
+ <xsd:element name="Tli" type="TacanUsageLimitationType"/>
148
+ <xsd:element name="Tls" type="TlofLightingSystemType"/>
149
+ <xsd:element name="Tly" type="TaxiwayLightingSystemType"/>
150
+ <xsd:element name="Tsa" type="TlofSafeAreaType"/>
151
+ <xsd:element name="Tsg" type="TlofSafeAreaGeometryType"/>
152
+ <xsd:element name="Twy" type="TaxiwayType"/>
153
+ <xsd:element name="Uac" type="UnitAssociationType"/>
154
+ <xsd:element name="Uas" type="UnitContactAddressType"/>
155
+ <xsd:element name="Uni" type="UnitType"/>
156
+ <xsd:element name="Vli" type="VorUsageLimitationType"/>
157
+ <xsd:element name="Vor" type="VorType"/>
158
+ <xsd:element name="Lbm" type="LabelMarkerType"/>
159
+ <xsd:element name="Aac" type="AirspaceAssocType">
160
+ <xsd:annotation>
161
+ <xsd:appinfo>DEPRECATED-4.0</xsd:appinfo>
162
+ <xsd:documentation>[Deprecated]</xsd:documentation>
163
+ </xsd:annotation>
164
+ </xsd:element>
165
+ <xsd:element name="Dln" type="DmeLimitationType">
166
+ <xsd:annotation>
167
+ <xsd:appinfo>DEPRECATED-4.0</xsd:appinfo>
168
+ <xsd:documentation>[Deprecated]</xsd:documentation>
169
+ </xsd:annotation>
170
+ </xsd:element>
171
+ <xsd:element name="Nln" type="NdbLimitationType">
172
+ <xsd:annotation>
173
+ <xsd:appinfo>DEPRECATED-4.0</xsd:appinfo>
174
+ <xsd:documentation>[Deprecated]</xsd:documentation>
175
+ </xsd:annotation>
176
+ </xsd:element>
177
+ <xsd:element name="Tln" type="TacanLimitationType">
178
+ <xsd:annotation>
179
+ <xsd:appinfo>DEPRECATED-4.0</xsd:appinfo>
180
+ <xsd:documentation>[Deprecated]</xsd:documentation>
181
+ </xsd:annotation>
182
+ </xsd:element>
183
+ <xsd:element name="Vln" type="VorLimitationType">
184
+ <xsd:annotation>
185
+ <xsd:appinfo>DEPRECATED-4.0</xsd:appinfo>
186
+ <xsd:documentation>[Deprecated]</xsd:documentation>
187
+ </xsd:annotation>
188
+ </xsd:element>
189
+ </xsd:choice>
190
+ <xsd:attribute name="version" type="xsd:string" use="required">
191
+ <xsd:annotation>
192
+ <xsd:documentation>The version of the OFMX-Snapshot.xsd schema to which the message conforms</xsd:documentation>
193
+ </xsd:annotation>
194
+ </xsd:attribute>
195
+ <xsd:attribute name="origin" type="xsd:string" use="required">
196
+ <xsd:annotation>
197
+ <xsd:documentation>The originator (source) of the message</xsd:documentation>
198
+ </xsd:annotation>
199
+ </xsd:attribute>
200
+ <xsd:attribute name="namespace" type="uuid" use="required">
201
+ <xsd:annotation>
202
+ <xsd:documentation>The originator (source) namespace of the message</xsd:documentation>
203
+ </xsd:annotation>
204
+ </xsd:attribute>
205
+ <xsd:attribute name="created" type="xsd:dateTime" use="required">
206
+ <xsd:annotation>
207
+ <xsd:documentation>The date and time when the message was created</xsd:documentation>
208
+ </xsd:annotation>
209
+ </xsd:attribute>
210
+ <xsd:attribute name="effective" type="xsd:dateTime" use="required">
211
+ <xsd:annotation>
212
+ <xsd:documentation>The date and time used as criteria to select valid versions included in the message</xsd:documentation>
213
+ </xsd:annotation>
214
+ </xsd:attribute>
215
+ </xsd:complexType>
216
+ </xsd:element>
217
+ </xsd:schema>
@@ -2,10 +2,30 @@ module AIXM
2
2
  class Factory
3
3
  class << self
4
4
 
5
+ # Base
6
+
5
7
  def xy
6
8
  AIXM.xy(lat: 10, long: 20)
7
9
  end
8
10
 
11
+ def z
12
+ AIXM.z(1000, :qnh)
13
+ end
14
+
15
+ def f
16
+ AIXM.f(123.35, :mhz)
17
+ end
18
+
19
+ # Components
20
+
21
+ def timetable
22
+ AIXM.timetable(
23
+ code: :sunrise_to_sunset
24
+ ).tap do |timetable|
25
+ timetable.remarks = "timetable remarks"
26
+ end
27
+ end
28
+
9
29
  def vertical_limits
10
30
  AIXM.vertical_limits(
11
31
  upper_z: AIXM.z(65, :qne),
@@ -15,11 +35,15 @@ module AIXM
15
35
  )
16
36
  end
17
37
 
18
- def class_layer
19
- AIXM.class_layer(
38
+ def layer
39
+ AIXM.layer(
20
40
  class: :C,
21
41
  vertical_limits: vertical_limits
22
- )
42
+ ).tap do |layer|
43
+ layer.timetable = AIXM::H24
44
+ layer.selective = true
45
+ layer.remarks = 'airspace layer'
46
+ end
23
47
  end
24
48
 
25
49
  def polygon_geometry
@@ -48,73 +72,90 @@ module AIXM
48
72
  end
49
73
  end
50
74
 
75
+ # Airspaces
76
+
51
77
  def polygon_airspace
52
78
  AIXM.airspace(
79
+ source: 'LF|GEN|0.0 FACTORY|0|0',
80
+ region: 'LF',
81
+ id: 'PA',
82
+ type: :danger_area,
53
83
  name: 'POLYGON AIRSPACE',
54
- short_name: 'POLYGON',
55
- type: 'D'
84
+ short_name: 'POLYGON'
56
85
  ).tap do |airspace|
57
- airspace.schedule = AIXM::H24
58
- airspace.class_layers << class_layer
86
+ airspace.layers << layer
59
87
  airspace.geometry = polygon_geometry
60
- airspace.remarks = 'polygon airspace'
61
88
  end
62
89
  end
63
90
 
64
91
  def circle_airspace
65
92
  AIXM.airspace(
93
+ source: 'LF|GEN|0.0 FACTORY|0|0',
94
+ region: 'LF',
95
+ id: 'CA',
96
+ type: :danger_area,
66
97
  name: 'CIRCLE AIRSPACE',
67
- short_name: 'CIRCLE',
68
- type: 'D'
98
+ short_name: 'CIRCLE'
69
99
  ).tap do |airspace|
70
- airspace.schedule = AIXM::H24
71
- airspace.class_layers << class_layer
100
+ airspace.layers << layer
72
101
  airspace.geometry = circle_geometry
73
- airspace.remarks = 'circle airspace'
74
102
  end
75
103
  end
76
104
 
105
+ # Navigational aids
106
+
77
107
  def designated_point
78
108
  AIXM.designated_point(
109
+ source: 'LF|GEN|0.0 FACTORY|0|0',
110
+ region: 'LF',
79
111
  id: 'DDD',
80
112
  name: 'DESIGNATED POINT NAVAID',
81
113
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
82
114
  z: AIXM.z(500, :qnh),
83
115
  type: :ICAO
84
116
  ).tap do |designated_point|
85
- designated_point.schedule = AIXM::H24
117
+ designated_point.timetable = AIXM::H24
86
118
  designated_point.remarks = 'designated point navaid'
87
119
  end
88
120
  end
89
121
 
90
122
  def dme
91
123
  AIXM.dme(
124
+ source: 'LF|GEN|0.0 FACTORY|0|0',
125
+ region: 'LF',
126
+ organisation: organisation,
92
127
  id: 'MMM',
93
128
  name: 'DME NAVAID',
94
129
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
95
130
  z: AIXM.z(500, :qnh),
96
131
  channel: '95X'
97
132
  ).tap do |dme|
98
- dme.schedule = AIXM::H24
133
+ dme.timetable = AIXM::H24
99
134
  dme.remarks = 'dme navaid'
100
135
  end
101
136
  end
102
137
 
103
138
  def marker
104
139
  AIXM.marker(
140
+ source: 'LF|GEN|0.0 FACTORY|0|0',
141
+ region: 'LF',
142
+ organisation: organisation,
105
143
  id: '---',
106
144
  name: 'MARKER NAVAID',
107
145
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
108
146
  z: AIXM.z(500, :qnh),
109
147
  type: :outer
110
148
  ).tap do |marker|
111
- marker.schedule = AIXM::H24
149
+ marker.timetable = AIXM::H24
112
150
  marker.remarks = 'marker navaid'
113
151
  end
114
152
  end
115
153
 
116
154
  def ndb
117
155
  AIXM.ndb(
156
+ source: 'LF|GEN|0.0 FACTORY|0|0',
157
+ region: 'LF',
158
+ organisation: organisation,
118
159
  id: 'NNN',
119
160
  name: 'NDB NAVAID',
120
161
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
@@ -122,26 +163,32 @@ module AIXM
122
163
  type: :en_route,
123
164
  f: AIXM.f(555, :khz)
124
165
  ).tap do |ndb|
125
- ndb.schedule = AIXM::H24
166
+ ndb.timetable = AIXM::H24
126
167
  ndb.remarks = 'ndb navaid'
127
168
  end
128
169
  end
129
170
 
130
171
  def tacan
131
172
  AIXM.tacan(
173
+ source: 'LF|GEN|0.0 FACTORY|0|0',
174
+ region: 'LF',
175
+ organisation: organisation,
132
176
  id: 'TTT',
133
177
  name: 'TACAN NAVAID',
134
178
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
135
179
  z: AIXM.z(500, :qnh),
136
180
  channel: '29X'
137
181
  ).tap do |tacan|
138
- tacan.schedule = AIXM::H24
182
+ tacan.timetable = AIXM::H24
139
183
  tacan.remarks = 'tacan navaid'
140
184
  end
141
185
  end
142
186
 
143
187
  def vor
144
188
  AIXM.vor(
189
+ source: 'LF|GEN|0.0 FACTORY|0|0',
190
+ region: 'LF',
191
+ organisation: organisation,
145
192
  id: 'VVV',
146
193
  name: 'VOR NAVAID',
147
194
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
@@ -150,13 +197,16 @@ module AIXM
150
197
  f: AIXM.f(111, :mhz),
151
198
  north: :geographic
152
199
  ).tap do |vor|
153
- vor.schedule = AIXM::H24
200
+ vor.timetable = AIXM::H24
154
201
  vor.remarks = 'vor navaid'
155
202
  end
156
203
  end
157
204
 
158
205
  def vordme
159
206
  AIXM.vor(
207
+ source: 'LF|GEN|0.0 FACTORY|0|0',
208
+ region: 'LF',
209
+ organisation: organisation,
160
210
  id: 'VDD',
161
211
  name: 'VOR/DME NAVAID',
162
212
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
@@ -165,7 +215,7 @@ module AIXM
165
215
  f: AIXM.f(111, :mhz),
166
216
  north: :geographic
167
217
  ).tap do |vordme|
168
- vordme.schedule = AIXM::H24
218
+ vordme.timetable = AIXM::H24
169
219
  vordme.remarks = 'vor/dme navaid'
170
220
  vordme.associate_dme(channel: '95X')
171
221
  end
@@ -173,6 +223,9 @@ module AIXM
173
223
 
174
224
  def vortac
175
225
  AIXM.vor(
226
+ source: 'LF|GEN|0.0 FACTORY|0|0',
227
+ region: 'LF',
228
+ organisation: organisation,
176
229
  id: 'VTT',
177
230
  name: 'VORTAC NAVAID',
178
231
  xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
@@ -181,25 +234,148 @@ module AIXM
181
234
  f: AIXM.f(111, :mhz),
182
235
  north: :geographic
183
236
  ).tap do |vortac|
184
- vortac.schedule = AIXM::H24
237
+ vortac.timetable = AIXM::H24
185
238
  vortac.remarks = 'vortac navaid'
186
239
  vortac.associate_tacan(channel: '29X')
187
240
  end
188
241
  end
189
242
 
243
+ # Organisation
244
+
245
+ def organisation
246
+ AIXM.organisation(
247
+ source: 'LF|GEN|0.0 FACTORY|0|0',
248
+ region: 'LF',
249
+ name: 'FRANCE',
250
+ type: 'S'
251
+ ).tap do |organisation|
252
+ organisation.id = 'LF'
253
+ organisation.remarks = 'Oversea departments not included'
254
+ end
255
+ end
256
+
257
+ # Unit
258
+
259
+ def unit
260
+ AIXM.unit(
261
+ source: 'LF|GEN|0.0 FACTORY|0|0',
262
+ region: 'LF',
263
+ organisation: organisation,
264
+ name: 'PUJAUT TWR',
265
+ type: :aerodrome_control_tower,
266
+ class: :icao
267
+ ).tap do |unit|
268
+ unit.airport = airport
269
+ unit.remarks = 'A/A FR only'
270
+ unit.add_service(service)
271
+ end
272
+ end
273
+
274
+ def service
275
+ AIXM.service(
276
+ name: "PUJAUT TOWER",
277
+ type: :approach_control_service
278
+ ).tap do |service|
279
+ service.timetable = AIXM::H24
280
+ service.remarks = "service remarks"
281
+ service.add_frequency(frequency)
282
+ end
283
+ end
284
+
285
+ def frequency
286
+ AIXM.frequency(
287
+ transmission_f: AIXM.f(123.35, :mhz),
288
+ callsigns: { en: "PUJAUT CONTROL", fr: "PUJAUT CONTROLE" }
289
+ ).tap do |frequency|
290
+ frequency.type = :standard
291
+ frequency.reception_f = AIXM.f(124.1, :mhz)
292
+ frequency.timetable = AIXM::H24
293
+ frequency.remarks = "frequency remarks"
294
+ end
295
+ end
296
+
297
+ # Airport
298
+
299
+ def airport
300
+ AIXM.airport(
301
+ source: 'LF|GEN|0.0 FACTORY|0|0',
302
+ region: 'LF',
303
+ organisation: organisation,
304
+ code: 'LFNT',
305
+ name: 'Avignon-Pujaut',
306
+ xy: AIXM.xy(lat: %q(43°59'46"N), long: %q(004°45'16"E))
307
+ ).tap do |airport|
308
+ airport.gps = "LFPUJAUT"
309
+ airport.z = AIXM.z(146, :qnh)
310
+ airport.declination = 1.08
311
+ airport.transition_z = AIXM.z(10_000, :qnh)
312
+ airport.remarks = "Restricted access"
313
+ airport.add_runway(runway)
314
+ airport.add_helipad(helipad)
315
+ airport.add_usage_limitation :permitted
316
+ airport.add_usage_limitation(:reservation_required) do |reservation_required|
317
+ reservation_required.add_condition { |c| c.aircraft = :glider }
318
+ reservation_required.add_condition { |c| c.origin = :international }
319
+ reservation_required.timetable = AIXM::H24
320
+ reservation_required.remarks = "reservation remarks"
321
+ end
322
+ end
323
+ end
324
+
325
+ def runway
326
+ AIXM.runway(name: '16L/34R').tap do |runway|
327
+ runway.length = 650
328
+ runway.width = 80
329
+ runway.composition = :graded_earth
330
+ runway.status = :closed
331
+ runway.remarks = "Markings eroded"
332
+ runway.forth.xy = AIXM.xy(lat: %q(44°00'07.63"N), long: %q(004°45'07.81"E))
333
+ runway.forth.z = AIXM.z(145, :qnh)
334
+ runway.forth.displaced_threshold = AIXM.xy(lat: %q(44°00'03.54"N), long: %q(004°45'09.30"E))
335
+ runway.forth.geographic_orientation = 165
336
+ runway.forth.remarks = "forth remarks"
337
+ runway.back.xy = AIXM.xy(lat: %q(43°59'25.31"N), long: %q(004°45'23.24"E))
338
+ runway.forth.z = AIXM.z(147, :qnh)
339
+ runway.back.displaced_threshold = AIXM.xy(lat: %q(43°59'31.84"N), long: %q(004°45'20.85"E))
340
+ runway.back.geographic_orientation = 345
341
+ runway.back.remarks = "back remarks"
342
+ end
343
+ end
344
+
345
+ def helipad
346
+ AIXM.helipad(name: 'H1').tap do |helipad|
347
+ helipad.xy = AIXM.xy(lat: %q(43°59'56.94"N), long: %q(004°45'05.56"E))
348
+ helipad.z = AIXM.z(141, :qnh)
349
+ helipad.length = 20
350
+ helipad.width = 20
351
+ helipad.composition = :grass
352
+ helipad.status = :other
353
+ helipad.remarks = "Authorizaton by AD operator required"
354
+ end
355
+ end
356
+
357
+ # Document
358
+
190
359
  def document
191
- time = Time.parse('2018-01-18 12:00:00 +0100')
192
- AIXM.document(created_at: time, effective_at: time).tap do |document|
193
- document.features << AIXM::Factory.polygon_airspace
194
- document.features << AIXM::Factory.circle_airspace
195
- document.features << AIXM::Factory.designated_point
196
- document.features << AIXM::Factory.dme
197
- document.features << AIXM::Factory.marker
198
- document.features << AIXM::Factory.ndb
199
- document.features << AIXM::Factory.tacan
200
- document.features << AIXM::Factory.vor
201
- document.features << AIXM::Factory.vordme
202
- document.features << AIXM::Factory.vortac
360
+ time = Time.parse('2018-01-01 12:00:00 +0100')
361
+ AIXM.document(
362
+ namespace: '00000000-0000-0000-0000-000000000000',
363
+ created_at: time,
364
+ effective_at: time
365
+ ).tap do |document|
366
+ document.features << organisation
367
+ document.features << unit
368
+ document.features << airport
369
+ document.features << polygon_airspace
370
+ document.features << circle_airspace
371
+ document.features << designated_point
372
+ document.features << dme
373
+ document.features << marker
374
+ document.features << ndb
375
+ document.features << tacan
376
+ document.features << vor
377
+ document.features << vordme
378
+ document.features << vortac
203
379
  end
204
380
  end
205
381