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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.yardopts +3 -0
- data/CHANGELOG.md +34 -14
- data/Guardfile +1 -0
- data/README.md +64 -257
- data/lib/aixm.rb +16 -7
- data/lib/aixm/component.rb +6 -0
- data/lib/aixm/component/frequency.rb +135 -0
- data/lib/aixm/component/geometry.rb +34 -23
- data/lib/aixm/component/geometry/arc.rb +37 -22
- data/lib/aixm/component/geometry/border.rb +29 -20
- data/lib/aixm/component/geometry/circle.rb +39 -22
- data/lib/aixm/component/geometry/point.rb +29 -13
- data/lib/aixm/component/helipad.rb +154 -0
- data/lib/aixm/component/layer.rb +91 -0
- data/lib/aixm/component/runway.rb +294 -0
- data/lib/aixm/component/service.rb +170 -0
- data/lib/aixm/component/timetable.rb +65 -0
- data/lib/aixm/component/vertical_limits.rb +65 -29
- data/lib/aixm/config.rb +87 -0
- data/lib/aixm/document.rb +66 -42
- data/lib/aixm/errors.rb +11 -0
- data/lib/aixm/f.rb +34 -20
- data/lib/aixm/feature.rb +38 -0
- data/lib/aixm/feature/airport.rb +473 -0
- data/lib/aixm/feature/airspace.rb +145 -92
- data/lib/aixm/feature/navigational_aid.rb +94 -0
- data/lib/aixm/feature/navigational_aid/designated_point.rb +50 -54
- data/lib/aixm/feature/navigational_aid/dme.rb +48 -40
- data/lib/aixm/feature/navigational_aid/marker.rb +55 -45
- data/lib/aixm/feature/navigational_aid/ndb.rb +54 -50
- data/lib/aixm/feature/navigational_aid/tacan.rb +38 -31
- data/lib/aixm/feature/navigational_aid/vor.rb +84 -76
- data/lib/aixm/feature/organisation.rb +97 -0
- data/lib/aixm/feature/unit.rb +152 -0
- data/lib/aixm/refinements.rb +132 -47
- data/lib/aixm/shortcuts.rb +11 -6
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/xy.rb +64 -20
- data/lib/aixm/z.rb +51 -22
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-DataTypes.xsd +0 -0
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Features.xsd +0 -0
- data/{lib/aixm/schemas → schemas/aixm}/4.5/AIXM-Snapshot.xsd +0 -0
- data/schemas/ofmx/0/OFMX-DataTypes.xsd +5077 -0
- data/schemas/ofmx/0/OFMX-Features.xsd +9955 -0
- data/schemas/ofmx/0/OFMX-Snapshot.xsd +217 -0
- data/spec/factory.rb +209 -33
- data/spec/lib/aixm/component/frequency_spec.rb +75 -0
- data/spec/lib/aixm/component/geometry/arc_spec.rb +28 -22
- data/spec/lib/aixm/component/geometry/border_spec.rb +23 -20
- data/spec/lib/aixm/component/geometry/circle_spec.rb +31 -22
- data/spec/lib/aixm/component/geometry/point_spec.rb +11 -14
- data/spec/lib/aixm/component/geometry_spec.rb +150 -69
- data/spec/lib/aixm/component/helipad_spec.rb +136 -0
- data/spec/lib/aixm/component/layer_spec.rb +110 -0
- data/spec/lib/aixm/component/runway_spec.rb +402 -0
- data/spec/lib/aixm/component/service_spec.rb +61 -0
- data/spec/lib/aixm/component/timetable_spec.rb +49 -0
- data/spec/lib/aixm/component/vertical_limits_spec.rb +39 -20
- data/spec/lib/aixm/config_spec.rb +41 -0
- data/spec/lib/aixm/document_spec.rb +637 -147
- data/spec/lib/aixm/errors_spec.rb +14 -0
- data/spec/lib/aixm/f_spec.rb +17 -10
- data/spec/lib/aixm/feature/airport_spec.rb +546 -0
- data/spec/lib/aixm/feature/airspace_spec.rb +349 -226
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +47 -36
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +61 -36
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +61 -113
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +65 -79
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +57 -36
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +86 -112
- data/spec/lib/aixm/feature/navigational_aid_spec.rb +52 -0
- data/spec/lib/aixm/feature/organisation_spec.rb +77 -0
- data/spec/lib/aixm/feature/unit_spec.rb +227 -0
- data/spec/lib/aixm/feature_spec.rb +58 -0
- data/spec/lib/aixm/refinements_spec.rb +187 -178
- data/spec/lib/aixm/xy_spec.rb +45 -34
- data/spec/lib/aixm/z_spec.rb +19 -21
- data/spec/macros/organisation.rb +11 -0
- data/spec/macros/remarks.rb +12 -0
- data/spec/macros/timetable.rb +11 -0
- data/spec/macros/xy.rb +11 -0
- data/spec/macros/z_qnh.rb +11 -0
- data/spec/spec_helper.rb +26 -0
- metadata +60 -19
- data/lib/aixm/base.rb +0 -10
- data/lib/aixm/component/base.rb +0 -6
- data/lib/aixm/component/class_layer.rb +0 -46
- data/lib/aixm/component/geometry/base.rb +0 -8
- data/lib/aixm/component/schedule.rb +0 -43
- data/lib/aixm/feature/base.rb +0 -6
- data/lib/aixm/feature/navigational_aid/base.rb +0 -79
- data/spec/lib/aixm/component/class_layer_spec.rb +0 -74
- data/spec/lib/aixm/component/schedule_spec.rb +0 -33
- data/spec/lib/aixm/feature/navigational_aid/base_spec.rb +0 -41
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c0f5f953610761dad1816bb0a390155538205afc41fc53d677f9d433a53de5f6
|
|
4
|
+
data.tar.gz: ba6b9edea4dc9ffe27239021f28fb3b2cb816bba568286f0108bf070a7108a73
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0947e0e79962e86e21f96833d47944c012fd1be4fa28a2fbf1aa3d82e2549195bafdcb32d9b3e6fd65f8f63ede53000d7218c6afaa5393549768d1ad0d6b569
|
|
7
|
+
data.tar.gz: 4358cb754979f06efd3c62d0288a41db984573d6de47f021c585ab056f801c71de480c1258969eeed33db287cc13137355c016f7e911c91e555a499067d9f15c
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby-2.5.
|
|
1
|
+
ruby-2.5.1
|
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,45 +1,65 @@
|
|
|
1
|
+
## 0.3.0
|
|
2
|
+
|
|
3
|
+
* Breaking additions:
|
|
4
|
+
* Global configuration with `AIXM.config`
|
|
5
|
+
* Breaking changes:
|
|
6
|
+
* Switch from "AIXM with OFM extensions" to OFMX
|
|
7
|
+
* `to_aixm` renamed to `to_xml` again
|
|
8
|
+
* Removed signature `to_xml(extension)` in favor of `AIXM.schema`
|
|
9
|
+
* Removed `Array#to_digest`
|
|
10
|
+
* Removed `Document#complete?`
|
|
11
|
+
* Renamed Schedule to Timetable
|
|
12
|
+
* Timetable and remarks moved from Airspace to to Layer (formerly known as
|
|
13
|
+
class layer)
|
|
14
|
+
* Additions
|
|
15
|
+
* Organization and Unit features
|
|
16
|
+
* Airport feature
|
|
17
|
+
* Refinement `Float#to_rad`
|
|
18
|
+
* Distance calculation with `AIXM::XY#distance`
|
|
19
|
+
* `Schedule#remarks`
|
|
20
|
+
|
|
1
21
|
## 0.2.3
|
|
2
22
|
|
|
3
|
-
* Breaking
|
|
23
|
+
* Breaking changes:
|
|
4
24
|
* VOR types renamed from :vor to :conventional and :doppler_vor to :doppler
|
|
5
25
|
* NBR types added
|
|
6
26
|
* Marker types added
|
|
7
|
-
*
|
|
27
|
+
* Changes:
|
|
8
28
|
* "mid" attributes on all navigational aid features
|
|
9
29
|
|
|
10
30
|
## 0.2.2
|
|
11
31
|
|
|
12
|
-
*
|
|
32
|
+
* Changes:
|
|
13
33
|
* Bad error classes fixed
|
|
14
34
|
* Allow navigational aids without name
|
|
15
35
|
|
|
16
36
|
## 0.2.1
|
|
17
37
|
|
|
18
|
-
*
|
|
38
|
+
* Breaking changes:
|
|
19
39
|
* DVOR and VORDME confusion fixed
|
|
20
|
-
* Schedule added to navigational aids
|
|
21
40
|
* VOR can be associated with DME (-> VOR/DME) or TACAN (-> VORTAC) now
|
|
22
41
|
* `to_xml` renamed to `to_aixm` everywhere
|
|
23
|
-
* Minor changes:
|
|
24
42
|
* Removed :other from all value lists
|
|
43
|
+
* Changes:
|
|
44
|
+
* Schedule added to navigational aids
|
|
25
45
|
|
|
26
46
|
## 0.2.0
|
|
27
47
|
|
|
48
|
+
* Breaking changes:
|
|
49
|
+
* Symbols such as :qnh, :ofm or :mhz are downcased now
|
|
28
50
|
* Additions:
|
|
29
51
|
* Frequency
|
|
30
|
-
* Navigational aids
|
|
52
|
+
* Navigational aids features
|
|
31
53
|
* `AIXM::Z#qfe?` and friends
|
|
32
|
-
* Breaking major changes:
|
|
33
|
-
* Symbols such as :qnh, :ofm or :mhz are downcased now
|
|
34
54
|
|
|
35
55
|
## 0.1.4
|
|
36
56
|
|
|
37
|
-
* Breaking
|
|
57
|
+
* Breaking changes:
|
|
38
58
|
* `AIXM.z(alt: 123, code: :QNE)` is now `AIXM.z(123, :QNE)`
|
|
39
59
|
|
|
40
60
|
## 0.1.3
|
|
41
61
|
|
|
42
|
-
* Breaking
|
|
62
|
+
* Breaking changes:
|
|
43
63
|
* Re-organization of classes in features and components
|
|
44
64
|
* Additions:
|
|
45
65
|
* Shortcut initializers e.g. `AIXM.airspace(...)`
|
|
@@ -48,7 +68,7 @@
|
|
|
48
68
|
|
|
49
69
|
* Breaking additions:
|
|
50
70
|
* Class layers
|
|
51
|
-
* Breaking
|
|
71
|
+
* Breaking changes:
|
|
52
72
|
* Use `document.features << (feature)` instead of `document << (feature)`
|
|
53
73
|
|
|
54
74
|
## 0.1.1
|
|
@@ -58,7 +78,7 @@
|
|
|
58
78
|
* Refinement `Float#to_km` and `String#uptrans`
|
|
59
79
|
* Shortcut constants `AIXM::UNLIMITED` and `AIXM::H24`
|
|
60
80
|
* `Airspace#short_name`
|
|
61
|
-
*
|
|
81
|
+
* Changes:
|
|
62
82
|
* `Document#created_at` and `#effective_at` accept Time, Date, String or *nil*
|
|
63
83
|
* Separate `AIXM::Document#valid?` from `#complete?`
|
|
64
84
|
* Write coordinates in DD if extension `:OFM` is set
|
|
@@ -70,7 +90,7 @@
|
|
|
70
90
|
* XY Coordinate
|
|
71
91
|
* Z Altitude
|
|
72
92
|
* AIXM-Snapshot 4.5 Document
|
|
73
|
-
* Airspace
|
|
93
|
+
* Airspace feature
|
|
74
94
|
* Vertical Limits
|
|
75
95
|
* Geometry
|
|
76
96
|
* Point
|
data/Guardfile
CHANGED
data/README.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
# AIXM
|
|
8
8
|
|
|
9
|
-
Partial implementation of the [Aeronautical Information Exchange Model (AIXM 4.5)](http://aixm.aero) for Ruby.
|
|
9
|
+
Partial implementation of the [Aeronautical Information Exchange Model (AIXM 4.5)](http://aixm.aero) and it's dialect [Open FlightMaps eXchange format (OFMX 0)](https://github.com/openflightmaps/ofmx) for Ruby.
|
|
10
10
|
|
|
11
|
-
For now, only the parts needed to automize the AIP import of [Open Flightmaps](https://openflightmaps.org) are part of this gem. Most notably, the gem is only a builder
|
|
11
|
+
For now, only the parts needed to automize the AIP import of [Open Flightmaps](https://openflightmaps.org) are part of this gem. Most notably, the gem is only a builder for snapshot files and does not parse them.
|
|
12
12
|
|
|
13
13
|
* [Homepage](https://github.com/svoop/aixm)
|
|
14
14
|
* [API](http://www.rubydoc.info/gems/aixm)
|
|
@@ -24,293 +24,100 @@ gem aixm
|
|
|
24
24
|
|
|
25
25
|
## Usage
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Here's how to build a document object, populate it with a simple feature and then render it as AIXM:
|
|
28
28
|
|
|
29
29
|
```ruby
|
|
30
|
-
AIXM.
|
|
31
|
-
AIXM.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
All fundamentals are subclasses of `AIXM::Base`.
|
|
37
|
-
|
|
38
|
-
### Document
|
|
39
|
-
|
|
40
|
-
The document is the root container of the AIXM snapshot file to be generated. It's essentially a collection of features:
|
|
41
|
-
|
|
42
|
-
```ruby
|
|
43
|
-
document = AIXM.document(created_at: Time.now, effective_at: Time.now)
|
|
44
|
-
document.features << AIXM.airspace(...)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
To give you an overview of the AIXM building blocks, the remainder of this guide will use pseudo code to describe the initializer arguments, writer methods etc:
|
|
48
|
-
|
|
49
|
-
```ruby
|
|
50
|
-
document = AIXM.document(
|
|
51
|
-
created_at: Time or Date or String
|
|
52
|
-
effective_at: Time or Date or String
|
|
53
|
-
)
|
|
54
|
-
document.features << AIXM::Feature
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
See [the API documentation](http://www.rubydoc.info/gems/aixm) for details and [spec/factory.rb](https://github.com/svoop/aixm/blob/master/spec/factory.rb) for examples.
|
|
58
|
-
|
|
59
|
-
#### Coordinate
|
|
60
|
-
|
|
61
|
-
All of the below are equivalent:
|
|
62
|
-
|
|
63
|
-
```ruby
|
|
64
|
-
AIXM.xy(lat: %q(11°22'33.44"), long: %q(-111°22'33.44"))
|
|
65
|
-
AIXM.xy(lat: '112233.44N', long: '1112233.44W')
|
|
66
|
-
AIXM.xy(lat: 11.375955555555556, long: -111.37595555555555)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
#### Altitude and Heights
|
|
70
|
-
|
|
71
|
-
Altitudes and heights exist in three different forms:
|
|
72
|
-
|
|
73
|
-
```ruby
|
|
74
|
-
AIXM.z(1000, :qfe) # height: 1000ft above ground
|
|
75
|
-
AIXM.z(2000, :qnh) # altitude: of 2000ft above mean sea level
|
|
76
|
-
AIXM.z(45, :qne) # altitude: flight level 45
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
#### Frequency
|
|
80
|
-
|
|
81
|
-
```ruby
|
|
82
|
-
AIXM.f(123.35, :mhz)
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Features
|
|
86
|
-
|
|
87
|
-
All features are subclasses of `AIXM::Feature::Base`.
|
|
88
|
-
|
|
89
|
-
#### Airspace
|
|
90
|
-
|
|
91
|
-
```ruby
|
|
92
|
-
airspace = AIXM.airspace(
|
|
93
|
-
name: String
|
|
94
|
-
short_name: String or nil
|
|
95
|
-
type: String or Symbol
|
|
96
|
-
)
|
|
97
|
-
airspace.schedule = AIXM.schedule
|
|
98
|
-
airspace.geometry << AIXM.point or AIXM.arc or AIXM.border or AIXM.circle
|
|
99
|
-
airspace.class_layers << AIXM.class_layer
|
|
100
|
-
airspace.remarks = String
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
#### Navigational Aids
|
|
104
|
-
|
|
105
|
-
##### Designated Point
|
|
106
|
-
|
|
107
|
-
```ruby
|
|
108
|
-
designated_point = AIXM.designated_point(
|
|
109
|
-
id: String
|
|
110
|
-
name: String or nil
|
|
111
|
-
xy: AIXM.xy
|
|
112
|
-
z: AIXM.z or nil
|
|
113
|
-
type: :icao or :adhp, or :coordinates
|
|
114
|
-
)
|
|
115
|
-
designated_point.schedule = AIXM.schedule
|
|
116
|
-
designated_point.remarks = String
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
##### DME
|
|
120
|
-
|
|
121
|
-
```ruby
|
|
122
|
-
dme = AIXM.dme(
|
|
123
|
-
id: String
|
|
124
|
-
name: String
|
|
125
|
-
xy: AIXM.xy
|
|
126
|
-
z: AIXM.z or nil
|
|
127
|
-
channel: String
|
|
128
|
-
)
|
|
129
|
-
dme.schedule = AIXM.schedule
|
|
130
|
-
dme.remarks = String
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
##### NDB
|
|
134
|
-
|
|
135
|
-
```ruby
|
|
136
|
-
ndb = AIXM.ndb(
|
|
137
|
-
id: String
|
|
138
|
-
name: String
|
|
139
|
-
xy: AIXM.xy
|
|
140
|
-
z: AIXM.z or nil
|
|
141
|
-
type: :en_route, :locator or :marine
|
|
142
|
-
f: AIXM.f
|
|
143
|
-
)
|
|
144
|
-
ndb.schedule = AIXM.schedule
|
|
145
|
-
ndb.remarks = String
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
##### Marker
|
|
149
|
-
|
|
150
|
-
WARNING: Marker are not fully implemented because they usually have to be
|
|
151
|
-
associated with ILS which are not yet implemented.
|
|
152
|
-
|
|
153
|
-
```ruby
|
|
154
|
-
marker = AIXM.marker(
|
|
155
|
-
id: String
|
|
156
|
-
name: String
|
|
157
|
-
xy: AIXM.xy
|
|
158
|
-
z: AIXM.z or nil
|
|
159
|
-
type: :outer, :middle, :inner or :backcourse
|
|
160
|
-
)
|
|
161
|
-
marker.schedule = AIXM.schedule
|
|
162
|
-
marker.remarks = String
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
##### TACAN
|
|
166
|
-
|
|
167
|
-
```ruby
|
|
168
|
-
tacan = AIXM.tacan(
|
|
169
|
-
id: String
|
|
170
|
-
name: String
|
|
171
|
-
xy: AIXM.xy
|
|
172
|
-
z: AIXM.z or nil
|
|
173
|
-
channel: String
|
|
174
|
-
)
|
|
175
|
-
tacan.schedule = AIXM.schedule
|
|
176
|
-
tacan.remarks = String
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
##### VOR
|
|
180
|
-
|
|
181
|
-
```ruby
|
|
182
|
-
vor = AIXM.vor(
|
|
183
|
-
id: String
|
|
184
|
-
name: String
|
|
185
|
-
xy: AIXM.xy
|
|
186
|
-
z: AIXM.z or nil
|
|
187
|
-
type: :conventional or :doppler
|
|
188
|
-
f: AIXM.f
|
|
189
|
-
north: :geographic or :grid or :magnetic
|
|
190
|
-
)
|
|
191
|
-
vor.schedule = AIXM.schedule
|
|
192
|
-
vor.remarks = String
|
|
193
|
-
vor.associate_dme(channel: String) # turns the VOR into a VOR/DME
|
|
194
|
-
vor.associate_tacan(channel: String) # turns the VOR into a VORTAC
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### Components
|
|
198
|
-
|
|
199
|
-
All components are subclasses of `AIXM::Component::Base`.
|
|
200
|
-
|
|
201
|
-
#### Schedule
|
|
202
|
-
|
|
203
|
-
```ruby
|
|
204
|
-
schedule = AIXM.schedule(
|
|
205
|
-
code: String or Symbol
|
|
30
|
+
document = AIXM.document
|
|
31
|
+
document.features << AIXM.designated_point(
|
|
32
|
+
id: "ABIXI",
|
|
33
|
+
xy: AIXM.xy(lat: %q(46°31'54.3"N), long: %q(002°19'55.2"W)),
|
|
34
|
+
type: :icao
|
|
206
35
|
)
|
|
36
|
+
document.aixm! # not really necessary since AIXM is the default schema
|
|
37
|
+
document.to_xml
|
|
207
38
|
```
|
|
208
39
|
|
|
209
|
-
|
|
40
|
+
You can initialize all elements either traditionally or by use of shorter AIXM class methods. The following two statements are identical:
|
|
210
41
|
|
|
211
42
|
```ruby
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
vertical_limits: AIXM.vertical_limits
|
|
215
|
-
)
|
|
43
|
+
AIXM::Feature::NavigationalAid::DesignatedPoint.new(...)
|
|
44
|
+
AIXM.designated_point(...)
|
|
216
45
|
```
|
|
217
46
|
|
|
218
|
-
|
|
47
|
+
## Configuration
|
|
219
48
|
|
|
220
|
-
|
|
221
|
-
vertical_limits = AIXM.vertical_limits(
|
|
222
|
-
max_z: AIXM.z or nil
|
|
223
|
-
upper_z: AIXM.z
|
|
224
|
-
lower_z: AIXM.z
|
|
225
|
-
min_z: AIXM.z or nil
|
|
226
|
-
)
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
#### Point, Arc, Border and Circle
|
|
49
|
+
The following configuration options are available for setting and getting:
|
|
230
50
|
|
|
231
51
|
```ruby
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
arc = AIXM.arc(
|
|
236
|
-
xy: AIXM.xy
|
|
237
|
-
center_xy: AIXM.xy
|
|
238
|
-
cloclwise: true or false
|
|
239
|
-
)
|
|
240
|
-
border = AIXM.border(
|
|
241
|
-
xy: AIXM.xy
|
|
242
|
-
name: String
|
|
243
|
-
)
|
|
244
|
-
circle = AIXM.circle(
|
|
245
|
-
center_xy: AIXM.xy
|
|
246
|
-
radius: Numeric
|
|
247
|
-
)
|
|
52
|
+
AIXM.config.schema # either :aixm (default) or :ofmx
|
|
53
|
+
AIXM.config.region # fallback region
|
|
54
|
+
AIXM.config.ignored_errors # ignore XML schema errors which match this regex
|
|
248
55
|
```
|
|
249
56
|
|
|
250
|
-
|
|
57
|
+
There are shortcuts to set and get the schema:
|
|
251
58
|
|
|
252
59
|
```ruby
|
|
253
|
-
|
|
254
|
-
|
|
60
|
+
AIXM.schema # => :aixm
|
|
61
|
+
AIXM.aixm? # => true
|
|
62
|
+
AIXM.ofmx! # => :ofmx
|
|
63
|
+
AIXM.ofmx? # => true
|
|
64
|
+
AIXM.schema # => :ofmx
|
|
65
|
+
AIXM.schema(:version) # => 0
|
|
255
66
|
```
|
|
256
67
|
|
|
257
|
-
For a geometry to be complete, it must be comprised of either:
|
|
258
|
-
|
|
259
|
-
* exactly one circle
|
|
260
|
-
* at least three points, arcs or borders (the last of which a point with identical coordinates as the first)
|
|
261
|
-
|
|
262
68
|
## Validation
|
|
263
69
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
Use `AIXM::Document#valid?` to validate the resulting AIXM against the XSD schema. If any, you find the errors in `AIXM::Document#errors`. Since the data model is not fully implemented, some associations cannot be assigned and have to be left empty. The resulting validation errors are silently ignored:
|
|
267
|
-
|
|
268
|
-
* OrgUid - organizations may be empty tags
|
|
70
|
+
`AIXM::Document#valid?` validates the resulting AIXM or OFMX against its XML schema. If any, you find the errors in `AIXM::Document#errors`.
|
|
269
71
|
|
|
270
|
-
##
|
|
72
|
+
## Model
|
|
271
73
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
74
|
+
### Fundamentals
|
|
75
|
+
* [Document](http://www.rubydoc.info/gems/aixm/AIXM/Document.html)
|
|
76
|
+
* [XY (longitude and latitude)](http://www.rubydoc.info/gems/aixm/AIXM/XY.html)
|
|
77
|
+
* [Z (height, elevation or altitude)](http://www.rubydoc.info/gems/aixm/AIXM/Z.html)
|
|
78
|
+
* [F (frequency)](http://www.rubydoc.info/gems/aixm/AIXM/F.html)
|
|
276
79
|
|
|
277
|
-
|
|
80
|
+
### Features
|
|
81
|
+
* [Organisation](http://www.rubydoc.info/gems/aixm/AIXM/Feature/Organisation.html)
|
|
82
|
+
* [Unit](http://www.rubydoc.info/gems/aixm/AIXM/Feature/Unit.html)
|
|
83
|
+
* [Airport](http://www.rubydoc.info/gems/aixm/AIXM/Feature/Airport.html)
|
|
84
|
+
* [Airspace](http://www.rubydoc.info/gems/aixm/AIXM/Feature/Airspace.html)
|
|
85
|
+
* [Navigational aid](http://www.rubydoc.info/gems/aixm/AIXM/NavigationalAid.html)
|
|
86
|
+
* [Designated point](http://www.rubydoc.info/gems/aixm/AIXM/Feature/DesignatedPoint.html)
|
|
87
|
+
* [DME](http://www.rubydoc.info/gems/aixm/AIXM/Feature/DME.html)
|
|
88
|
+
* [Marker](http://www.rubydoc.info/gems/aixm/AIXM/Feature/Marker.html)
|
|
89
|
+
* [NDB](http://www.rubydoc.info/gems/aixm/AIXM/Feature/NDB.html)
|
|
90
|
+
* [TACAN](http://www.rubydoc.info/gems/aixm/AIXM/Feature/TACAN.html)
|
|
91
|
+
* [VOR](http://www.rubydoc.info/gems/aixm/AIXM/Feature/VOR.html)
|
|
278
92
|
|
|
279
|
-
|
|
280
|
-
*
|
|
281
|
-
*
|
|
93
|
+
### Components
|
|
94
|
+
* [Service](http://www.rubydoc.info/gems/aixm/AIXM/Component/Service.html)
|
|
95
|
+
* [Frequency](http://www.rubydoc.info/gems/aixm/AIXM/Component/Frequency.html)
|
|
96
|
+
* [Geometry](http://www.rubydoc.info/gems/aixm/AIXM/Component/Geometry.html)
|
|
97
|
+
* [Point](http://www.rubydoc.info/gems/aixm/AIXM/Component/Point.html)
|
|
98
|
+
* [Arc](http://www.rubydoc.info/gems/aixm/AIXM/Component/Arc.html)
|
|
99
|
+
* [Border](http://www.rubydoc.info/gems/aixm/AIXM/Component/Border.html)
|
|
100
|
+
* [Circle](http://www.rubydoc.info/gems/aixm/AIXM/Component/Circle.html)
|
|
101
|
+
* [Runway](http://www.rubydoc.info/gems/aixm/AIXM/Component/Runway.html)
|
|
102
|
+
* [Helipad](http://www.rubydoc.info/gems/aixm/AIXM/Component/Helipad.html)
|
|
103
|
+
* [Layer](http://www.rubydoc.info/gems/aixm/AIXM/Component/Layer.html)
|
|
104
|
+
* [Vertical limits](http://www.rubydoc.info/gems/aixm/AIXM/Component/VerticalLimits.html)
|
|
105
|
+
* [Timetable](http://www.rubydoc.info/gems/aixm/AIXM/Component/Timetable.html)
|
|
282
106
|
|
|
283
107
|
## Refinements
|
|
284
108
|
|
|
285
|
-
By `using AIXM::Refinements` you get
|
|
286
|
-
|
|
287
|
-
* `Hash#lookup(key, default)`<br>Similar to `fetch` but falls back to values
|
|
288
|
-
* `String#indent(number)`<br>Indent every line of a string with *number* spaces
|
|
289
|
-
* `String#uptrans`<br>upcase and transliterate to match the reduced character set for names
|
|
290
|
-
* `String#to_dd`<br>Convert DMS angle to DD or `nil` if the format is not recognized
|
|
291
|
-
* `Float#to_dms(padding)`<br>Convert DD angle to DMS with the degrees zero padded to *padding* length
|
|
292
|
-
* `Float#trim`<br>Convert whole numbers to Integer and leave all other untouched
|
|
293
|
-
* `Float#to_km(from: unit)`<br>Convert a distance from *unit* (:km, :m, :nm or :ft) to km
|
|
294
|
-
|
|
295
|
-
See the [source code](https://github.com/svoop/aixm/blob/master/lib/aixm/refinements.rb) for more explicit descriptions and examples.
|
|
296
|
-
|
|
297
|
-
## Extensions
|
|
298
|
-
|
|
299
|
-
### OFM
|
|
300
|
-
|
|
301
|
-
This extension adds proprietary tags and attributes (most of which are prefixed with `xt_`) aiming to improve importing the resulting AIXM into the OFM originative suite:
|
|
302
|
-
|
|
303
|
-
* `<AIXM-Snapshot version="4.5 + OFM extensions of version 0.1" (...) />`<br>root node with extended version string
|
|
304
|
-
* `<Ase xt_classLayersAvail="(true|false)">`<br>true when multiple class layers and therefore an Adg-node is present
|
|
305
|
-
* `<xt_selAvail>(true|false)</xt_selAvail>`<br>enables conditional airspaces feature
|
|
306
|
-
* `<AseUid newEntity="(true|false)">`<br>tell the importer whether adding a new or updating an existing entity
|
|
109
|
+
By `using AIXM::Refinements` you get a few handy [extensions to Ruby core classes](http://www.rubydoc.info/gems/aixm/AIXM/Refinements.html).
|
|
307
110
|
|
|
308
111
|
## References
|
|
309
112
|
|
|
113
|
+
### AIXM
|
|
310
114
|
* [AIXM](http://aixm.aero)
|
|
311
|
-
* [
|
|
115
|
+
* [AICM 4.5 Documentation](https://openflightmaps.github.io/ofmx/aixm/4.5/manual/aicm/)
|
|
312
116
|
* [AIXM 4.5 Specification](http://aixm.aero/document/aixm-45-specification)
|
|
313
|
-
|
|
117
|
+
|
|
118
|
+
### OFMX
|
|
119
|
+
* [OFMX](https://github.com/openflightmaps/ofmx)
|
|
120
|
+
* [OFMX Documentation](https://github.com/openflightmaps/ofmx/wiki)
|
|
314
121
|
* [Open Flightmaps](https://openflightmaps.org)
|
|
315
122
|
|
|
316
123
|
## Tests
|