aixm 1.1.0 → 1.2.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +14 -0
- data/README.md +3 -1
- data/lib/aixm/a.rb +29 -15
- data/lib/aixm/association.rb +2 -1
- data/lib/aixm/classes.rb +4 -0
- data/lib/aixm/component/address.rb +15 -9
- data/lib/aixm/component/approach_lighting.rb +28 -25
- data/lib/aixm/component/fato.rb +38 -26
- data/lib/aixm/component/frequency.rb +32 -20
- data/lib/aixm/component/geometry/arc.rb +16 -3
- data/lib/aixm/component/geometry/border.rb +8 -1
- data/lib/aixm/component/geometry/circle.rb +14 -2
- data/lib/aixm/component/geometry/point.rb +8 -1
- data/lib/aixm/component/geometry/rhumb_line.rb +8 -1
- data/lib/aixm/component/geometry.rb +20 -10
- data/lib/aixm/component/helipad.rb +41 -20
- data/lib/aixm/component/layer.rb +31 -20
- data/lib/aixm/component/lighting.rb +22 -24
- data/lib/aixm/component/runway.rb +32 -25
- data/lib/aixm/component/service.rb +11 -17
- data/lib/aixm/component/surface.rb +47 -14
- data/lib/aixm/component/timesheet.rb +178 -0
- data/lib/aixm/component/timetable.rb +32 -13
- data/lib/aixm/component/vasis.rb +36 -6
- data/lib/aixm/component/vertical_limit.rb +26 -4
- data/lib/aixm/component.rb +4 -1
- data/lib/aixm/concerns/hash_equality.rb +21 -0
- data/lib/aixm/concerns/intensity.rb +30 -0
- data/lib/aixm/concerns/marking.rb +21 -0
- data/lib/aixm/concerns/remarks.rb +21 -0
- data/lib/aixm/concerns/timetable.rb +22 -0
- data/lib/aixm/d.rb +20 -14
- data/lib/aixm/document.rb +22 -5
- data/lib/aixm/f.rb +29 -17
- data/lib/aixm/feature/airport.rb +91 -45
- data/lib/aixm/feature/airspace.rb +28 -5
- data/lib/aixm/feature/navigational_aid/designated_point.rb +8 -1
- data/lib/aixm/feature/navigational_aid/dme.rb +12 -2
- data/lib/aixm/feature/navigational_aid/marker.rb +9 -2
- data/lib/aixm/feature/navigational_aid/ndb.rb +15 -3
- data/lib/aixm/feature/navigational_aid/vor.rb +20 -3
- data/lib/aixm/feature/navigational_aid.rb +29 -20
- data/lib/aixm/feature/obstacle.rb +105 -29
- data/lib/aixm/feature/obstacle_group.rb +3 -7
- data/lib/aixm/feature/organisation.rb +23 -14
- data/lib/aixm/feature/unit.rb +23 -11
- data/lib/aixm/feature.rb +23 -4
- data/lib/aixm/memoize.rb +3 -3
- data/lib/aixm/p.rb +20 -14
- data/lib/aixm/payload_hash.rb +5 -2
- data/lib/aixm/r.rb +15 -12
- data/lib/aixm/refinements.rb +42 -2
- data/lib/aixm/schedule/date.rb +181 -0
- data/lib/aixm/schedule/day.rb +114 -0
- data/lib/aixm/schedule/time.rb +255 -0
- data/lib/aixm/shortcuts.rb +3 -0
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/w.rb +20 -13
- data/lib/aixm/xy.rb +36 -25
- data/lib/aixm/z.rb +29 -17
- data/lib/aixm.rb +13 -0
- data.tar.gz.sig +0 -0
- metadata +22 -13
- metadata.gz.sig +0 -0
data/lib/aixm/xy.rb
CHANGED
@@ -29,8 +29,11 @@ module AIXM
|
|
29
29
|
#
|
30
30
|
# @see https://gitlab.com/openflightmaps/ofmx/wikis/Coordinates
|
31
31
|
class XY
|
32
|
+
include AIXM::Concerns::HashEquality
|
33
|
+
|
32
34
|
EARTH_RADIUS = 6_371_008.8
|
33
35
|
|
36
|
+
# See the {overview}[AIXM::XY] for examples.
|
34
37
|
def initialize(lat:, long:)
|
35
38
|
self.lat, self.long = lat, long
|
36
39
|
end
|
@@ -45,14 +48,14 @@ module AIXM
|
|
45
48
|
[lat(:ofmx), long(:ofmx)].join(' '.freeze)
|
46
49
|
end
|
47
50
|
|
51
|
+
# Latitude
|
52
|
+
#
|
48
53
|
# @!attribute lat
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# @param schema [Symbol, nil] either nil, +:aixm+ or +:ofmx+
|
55
|
-
# @return [String, Float] latitude
|
54
|
+
# @overload lat
|
55
|
+
# @param schema [Symbol, nil] either +:aixm+ or +:ofmx+ or +nil+
|
56
|
+
# @return [String, Float]
|
57
|
+
# @overload lat=(value)
|
58
|
+
# @param value [String, Numeric]
|
56
59
|
def lat(schema=nil)
|
57
60
|
case schema
|
58
61
|
when :ofmx then ("%011.8f" % @lat.abs.round(8)) + (@lat.negative? ? 'S' : 'N')
|
@@ -61,14 +64,19 @@ module AIXM
|
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
fail(ArgumentError, "invalid long") unless (-180..180).include? @long
|
67
|
+
def lat=(value)
|
68
|
+
@lat = float_for value
|
69
|
+
fail(ArgumentError, "invalid lat") unless (-90..90).include? @lat
|
68
70
|
end
|
69
71
|
|
70
|
-
#
|
71
|
-
#
|
72
|
+
# Longitude
|
73
|
+
#
|
74
|
+
# @!attribute long
|
75
|
+
# @overload long
|
76
|
+
# @param schema [Symbol, nil] either +:aixm+ or +:ofmx+ or +nil+
|
77
|
+
# @return [String, Float]
|
78
|
+
# @overload long=(value)
|
79
|
+
# @param value [String, Numeric]
|
72
80
|
def long(schema=nil)
|
73
81
|
case schema
|
74
82
|
when :ofmx then ("%012.8f" % @long.abs.round(8)) + (@long.negative? ? 'W' : 'E')
|
@@ -77,18 +85,29 @@ module AIXM
|
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
80
|
-
|
81
|
-
|
88
|
+
def long=(value)
|
89
|
+
@long = float_for value
|
90
|
+
fail(ArgumentError, "invalid long") unless (-180..180).include? @long
|
91
|
+
end
|
92
|
+
|
93
|
+
# Whether both longitude and latitude have zero DMS seconds (which may
|
94
|
+
# indicate rounded or estimated coordinates).
|
95
|
+
#
|
96
|
+
# @return [Boolean]
|
82
97
|
def seconds?
|
83
98
|
!(long.to_dms[-6,5].to_f.zero? && lat.to_dms[-6,5].to_f.zero?)
|
84
99
|
end
|
85
100
|
|
86
|
-
#
|
101
|
+
# Convert to point
|
102
|
+
#
|
103
|
+
# @return [AIXM::Component::Geometry::Point]
|
87
104
|
def to_point
|
88
105
|
AIXM.point(xy: self)
|
89
106
|
end
|
90
107
|
|
91
|
-
#
|
108
|
+
# Distance as calculated by the Haversine formula
|
109
|
+
#
|
110
|
+
# @return [AIXM::D]
|
92
111
|
def distance(other)
|
93
112
|
if self == other
|
94
113
|
AIXM.d(0, :m)
|
@@ -105,17 +124,9 @@ module AIXM
|
|
105
124
|
end
|
106
125
|
|
107
126
|
# @see Object#==
|
108
|
-
# @return [Boolean]
|
109
127
|
def ==(other)
|
110
128
|
self.class === other && lat == other.lat && long == other.long
|
111
129
|
end
|
112
|
-
alias_method :eql?, :==
|
113
|
-
|
114
|
-
# @see Object#hash
|
115
|
-
# @return [Integer]
|
116
|
-
def hash
|
117
|
-
to_s.hash
|
118
|
-
end
|
119
130
|
|
120
131
|
private
|
121
132
|
|
data/lib/aixm/z.rb
CHANGED
@@ -13,20 +13,36 @@ module AIXM
|
|
13
13
|
# * +AIXM::GROUND+ - surface expressed as "0 ft QFE"
|
14
14
|
# * +AIXM::UNLIMITED+ - no upper limit expressed as "FL 999"
|
15
15
|
class Z
|
16
|
+
include AIXM::Concerns::HashEquality
|
16
17
|
extend Forwardable
|
17
18
|
|
18
19
|
CODES = %i(qfe qnh qne).freeze
|
19
20
|
|
21
|
+
# Whether height, elevation or altitude is zero.
|
22
|
+
|
20
23
|
# @!method zero?
|
21
|
-
#
|
24
|
+
# @return [Boolean]
|
22
25
|
def_delegator :@alt, :zero?
|
23
26
|
|
24
|
-
#
|
27
|
+
# Altitude or elevation value.
|
28
|
+
#
|
29
|
+
# @overload alt
|
30
|
+
# @return [Integer]
|
31
|
+
# @overload alt=(value)
|
32
|
+
# @param value [Integer]
|
25
33
|
attr_reader :alt
|
26
34
|
|
27
|
-
#
|
35
|
+
# Q code
|
36
|
+
#
|
37
|
+
# @overload code
|
38
|
+
# @return [Symbol] either +:qfe+ (height in feet), +:qnh+ (altitude in
|
39
|
+
# feet or +:qne+ (altitude as flight level)
|
40
|
+
# @overload code=(value)
|
41
|
+
# @param value [Symbol] either +:qfe+ (height in feet), +:qnh+ (altitude
|
42
|
+
# in feet or +:qne+ (altitude as flight level)
|
28
43
|
attr_reader :code
|
29
44
|
|
45
|
+
# See the {overview}[AIXM::Z] for examples.
|
30
46
|
def initialize(alt, code)
|
31
47
|
self.alt, self.code = alt, code
|
32
48
|
end
|
@@ -52,43 +68,39 @@ module AIXM
|
|
52
68
|
fail(ArgumentError, "invalid code") unless CODES.include? @code
|
53
69
|
end
|
54
70
|
|
55
|
-
#
|
56
|
-
# @!method qnh?
|
57
|
-
# @!method qne?
|
71
|
+
# Whether QFE, QNH or QNE.
|
58
72
|
#
|
59
73
|
# @example
|
60
74
|
# z = AIXM.z(123, :qnh)
|
61
75
|
# z.qnh? # => true
|
62
76
|
# z.qfe? # => false
|
63
77
|
#
|
78
|
+
# @!method qfe?
|
79
|
+
# @!method qnh?
|
80
|
+
# @!method qne?
|
64
81
|
# @return [Boolean]
|
65
82
|
CODES.each do |code|
|
66
83
|
define_method(:"#{code}?") { @code == code }
|
67
84
|
end
|
68
85
|
|
69
|
-
#
|
86
|
+
# Whether ground level
|
87
|
+
#
|
88
|
+
# @return [Boolean]
|
70
89
|
def ground?
|
71
90
|
qfe? && @alt == 0
|
72
91
|
end
|
73
92
|
|
74
|
-
#
|
93
|
+
# Unit
|
94
|
+
#
|
95
|
+
# @return [Symbol] either +:fl+ (flight level) or +:ft+ (feet)
|
75
96
|
def unit
|
76
97
|
qne? ? :fl : :ft
|
77
98
|
end
|
78
99
|
|
79
100
|
# @see Object#==
|
80
|
-
# @return [Boolean]
|
81
101
|
def ==(other)
|
82
102
|
self.class === other && alt == other.alt && code == other.code
|
83
103
|
end
|
84
|
-
alias_method :eql?, :==
|
85
|
-
|
86
|
-
# @see Object#hash
|
87
|
-
# @return [Integer]
|
88
|
-
def hash
|
89
|
-
to_s.hash
|
90
|
-
end
|
91
104
|
|
92
105
|
end
|
93
|
-
|
94
106
|
end
|
data/lib/aixm.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'bigdecimal'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'date'
|
3
4
|
require 'time'
|
4
5
|
require 'pathname'
|
5
6
|
require 'securerandom'
|
@@ -10,6 +11,7 @@ require 'optparse'
|
|
10
11
|
require 'builder'
|
11
12
|
require 'nokogiri'
|
12
13
|
require 'dry/inflector'
|
14
|
+
require 'sun'
|
13
15
|
|
14
16
|
require_relative 'aixm/object'
|
15
17
|
|
@@ -24,6 +26,12 @@ require_relative 'aixm/memoize'
|
|
24
26
|
require_relative 'aixm/association'
|
25
27
|
require_relative 'aixm/payload_hash'
|
26
28
|
|
29
|
+
require_relative 'aixm/concerns/hash_equality'
|
30
|
+
require_relative 'aixm/concerns/timetable'
|
31
|
+
require_relative 'aixm/concerns/intensity'
|
32
|
+
require_relative 'aixm/concerns/marking'
|
33
|
+
require_relative 'aixm/concerns/remarks'
|
34
|
+
|
27
35
|
require_relative 'aixm/document'
|
28
36
|
require_relative 'aixm/xy'
|
29
37
|
require_relative 'aixm/z'
|
@@ -34,6 +42,10 @@ require_relative 'aixm/a'
|
|
34
42
|
require_relative 'aixm/w'
|
35
43
|
require_relative 'aixm/p'
|
36
44
|
|
45
|
+
require_relative 'aixm/schedule/date'
|
46
|
+
require_relative 'aixm/schedule/day'
|
47
|
+
require_relative 'aixm/schedule/time'
|
48
|
+
|
37
49
|
require_relative 'aixm/component'
|
38
50
|
require_relative 'aixm/component/address'
|
39
51
|
require_relative 'aixm/component/service'
|
@@ -47,6 +59,7 @@ require_relative 'aixm/component/geometry/border'
|
|
47
59
|
require_relative 'aixm/component/layer'
|
48
60
|
require_relative 'aixm/component/vertical_limit'
|
49
61
|
require_relative 'aixm/component/timetable'
|
62
|
+
require_relative 'aixm/component/timesheet'
|
50
63
|
require_relative 'aixm/component/runway'
|
51
64
|
require_relative 'aixm/component/fato'
|
52
65
|
require_relative 'aixm/component/helipad'
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aixm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Schwyn
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
1+2Y1+i+4jd1B7qxIgOLxQTNIJiwE0sqU1itFfuesfgUACS7M0IV9u9Bp4hBGNEw
|
31
31
|
5JcY2h7owdMxXIvgk1oakgldFJc=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2022-
|
33
|
+
date: 2022-04-21 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: builder
|
@@ -75,21 +75,21 @@ dependencies:
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
78
|
+
name: sun
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
84
|
-
type: :
|
83
|
+
version: '1'
|
84
|
+
type: :runtime
|
85
85
|
prerelease: false
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '1'
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
92
|
+
name: debug
|
93
93
|
requirement: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
@@ -103,7 +103,7 @@ dependencies:
|
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
|
-
name:
|
106
|
+
name: rake
|
107
107
|
requirement: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - ">="
|
@@ -117,7 +117,7 @@ dependencies:
|
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
- !ruby/object:Gem::Dependency
|
120
|
-
name: minitest
|
120
|
+
name: minitest
|
121
121
|
requirement: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ">="
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
133
|
- !ruby/object:Gem::Dependency
|
134
|
-
name: minitest-
|
134
|
+
name: minitest-sound
|
135
135
|
requirement: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - ">="
|
@@ -241,9 +241,15 @@ files:
|
|
241
241
|
- lib/aixm/component/runway.rb
|
242
242
|
- lib/aixm/component/service.rb
|
243
243
|
- lib/aixm/component/surface.rb
|
244
|
+
- lib/aixm/component/timesheet.rb
|
244
245
|
- lib/aixm/component/timetable.rb
|
245
246
|
- lib/aixm/component/vasis.rb
|
246
247
|
- lib/aixm/component/vertical_limit.rb
|
248
|
+
- lib/aixm/concerns/hash_equality.rb
|
249
|
+
- lib/aixm/concerns/intensity.rb
|
250
|
+
- lib/aixm/concerns/marking.rb
|
251
|
+
- lib/aixm/concerns/remarks.rb
|
252
|
+
- lib/aixm/concerns/timetable.rb
|
247
253
|
- lib/aixm/config.rb
|
248
254
|
- lib/aixm/constants.rb
|
249
255
|
- lib/aixm/d.rb
|
@@ -271,6 +277,9 @@ files:
|
|
271
277
|
- lib/aixm/payload_hash.rb
|
272
278
|
- lib/aixm/r.rb
|
273
279
|
- lib/aixm/refinements.rb
|
280
|
+
- lib/aixm/schedule/date.rb
|
281
|
+
- lib/aixm/schedule/day.rb
|
282
|
+
- lib/aixm/schedule/time.rb
|
274
283
|
- lib/aixm/shortcuts.rb
|
275
284
|
- lib/aixm/version.rb
|
276
285
|
- lib/aixm/w.rb
|
@@ -315,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
324
|
- !ruby/object:Gem::Version
|
316
325
|
version: '0'
|
317
326
|
requirements: []
|
318
|
-
rubygems_version: 3.3.
|
327
|
+
rubygems_version: 3.3.12
|
319
328
|
signing_key:
|
320
329
|
specification_version: 4
|
321
330
|
summary: Builder for AIXM/OFMX aeronautical information
|
metadata.gz.sig
CHANGED
Binary file
|