aixm 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|