aixm 0.3.8 → 0.3.10
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 +1 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +33 -3
- data/README.md +166 -56
- data/exe/ckmid +14 -0
- data/exe/mkmid +14 -0
- data/lib/aixm.rb +16 -6
- data/lib/aixm/association.rb +369 -0
- data/lib/aixm/classes.rb +43 -0
- data/lib/aixm/component/fato.rb +45 -53
- data/lib/aixm/component/frequency.rb +11 -12
- data/lib/aixm/component/geometry.rb +36 -38
- data/lib/aixm/component/geometry/arc.rb +2 -2
- data/lib/aixm/component/geometry/border.rb +6 -3
- data/lib/aixm/component/geometry/circle.rb +8 -2
- data/lib/aixm/component/geometry/point.rb +8 -2
- data/lib/aixm/component/helipad.rb +30 -38
- data/lib/aixm/component/layer.rb +28 -19
- data/lib/aixm/component/lighting.rb +12 -13
- data/lib/aixm/component/runway.rb +44 -48
- data/lib/aixm/{feature → component}/service.rb +37 -36
- data/lib/aixm/component/surface.rb +3 -3
- data/lib/aixm/component/timetable.rb +2 -2
- data/lib/aixm/component/{vertical_limits.rb → vertical_limit.rb} +12 -6
- data/lib/aixm/config.rb +2 -1
- data/lib/aixm/document.rb +27 -50
- data/lib/aixm/executables.rb +85 -0
- data/lib/aixm/feature.rb +13 -3
- data/lib/aixm/feature/address.rb +12 -13
- data/lib/aixm/feature/airport.rb +103 -128
- data/lib/aixm/feature/airspace.rb +44 -17
- data/lib/aixm/feature/navigational_aid.rb +7 -9
- data/lib/aixm/feature/navigational_aid/designated_point.rb +13 -15
- data/lib/aixm/feature/navigational_aid/dme.rb +11 -12
- data/lib/aixm/feature/navigational_aid/marker.rb +7 -3
- data/lib/aixm/feature/navigational_aid/ndb.rb +7 -3
- data/lib/aixm/feature/navigational_aid/tacan.rb +7 -3
- data/lib/aixm/feature/navigational_aid/vor.rb +23 -15
- data/lib/aixm/feature/obstacle.rb +29 -43
- data/lib/aixm/feature/obstacle_group.rb +37 -34
- data/lib/aixm/feature/organisation.rb +21 -5
- data/lib/aixm/feature/unit.rb +36 -46
- data/lib/aixm/memoize.rb +89 -0
- data/lib/aixm/object.rb +9 -0
- data/lib/aixm/payload_hash.rb +114 -0
- data/lib/aixm/refinements.rb +29 -76
- data/lib/aixm/shortcuts.rb +5 -42
- data/lib/aixm/version.rb +1 -1
- data/lib/aixm/xy.rb +1 -1
- data/schemas/ofmx/0/OFMX-Features.xsd +152 -20
- data/schemas/ofmx/0/OFMX-Snapshot.xsd +0 -5
- metadata +107 -156
- metadata.gz.sig +2 -0
- data/.github/workflows/test.yml +0 -26
- data/.gitignore +0 -6
- data/.ruby-version +0 -1
- data/.yardopts +0 -3
- data/Guardfile +0 -8
- data/aixm.gemspec +0 -35
- data/gems.rb +0 -3
- data/lib/aixm/component.rb +0 -6
- data/rakefile.rb +0 -36
- data/spec/factory.rb +0 -559
- data/spec/lib/aixm/a_spec.rb +0 -203
- data/spec/lib/aixm/component/fato_spec.rb +0 -267
- data/spec/lib/aixm/component/frequency_spec.rb +0 -74
- data/spec/lib/aixm/component/geometry/arc_spec.rb +0 -73
- data/spec/lib/aixm/component/geometry/border_spec.rb +0 -38
- data/spec/lib/aixm/component/geometry/circle_spec.rb +0 -68
- data/spec/lib/aixm/component/geometry/point_spec.rb +0 -37
- data/spec/lib/aixm/component/geometry_spec.rb +0 -316
- data/spec/lib/aixm/component/helipad_spec.rb +0 -193
- data/spec/lib/aixm/component/layer_spec.rb +0 -135
- data/spec/lib/aixm/component/lighting_spec.rb +0 -94
- data/spec/lib/aixm/component/runway_spec.rb +0 -479
- data/spec/lib/aixm/component/surface_spec.rb +0 -124
- data/spec/lib/aixm/component/timetable_spec.rb +0 -47
- data/spec/lib/aixm/component/vertical_limits_spec.rb +0 -94
- data/spec/lib/aixm/config_spec.rb +0 -41
- data/spec/lib/aixm/d_spec.rb +0 -150
- data/spec/lib/aixm/document_spec.rb +0 -1884
- data/spec/lib/aixm/errors_spec.rb +0 -14
- data/spec/lib/aixm/f_spec.rb +0 -85
- data/spec/lib/aixm/feature/address_spec.rb +0 -60
- data/spec/lib/aixm/feature/airport_spec.rb +0 -776
- data/spec/lib/aixm/feature/airspace_spec.rb +0 -394
- data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +0 -103
- data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +0 -98
- data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +0 -85
- data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +0 -95
- data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +0 -94
- data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +0 -251
- data/spec/lib/aixm/feature/navigational_aid_spec.rb +0 -52
- data/spec/lib/aixm/feature/obstacle_group_spec.rb +0 -330
- data/spec/lib/aixm/feature/obstacle_spec.rb +0 -284
- data/spec/lib/aixm/feature/organisation_spec.rb +0 -83
- data/spec/lib/aixm/feature/service_spec.rb +0 -59
- data/spec/lib/aixm/feature/unit_spec.rb +0 -238
- data/spec/lib/aixm/feature_spec.rb +0 -38
- data/spec/lib/aixm/p_spec.rb +0 -189
- data/spec/lib/aixm/refinements_spec.rb +0 -430
- data/spec/lib/aixm/version_spec.rb +0 -7
- data/spec/lib/aixm/w_spec.rb +0 -150
- data/spec/lib/aixm/xy_spec.rb +0 -180
- data/spec/lib/aixm/z_spec.rb +0 -94
- data/spec/macros/marking.rb +0 -12
- data/spec/macros/organisation.rb +0 -11
- data/spec/macros/remarks.rb +0 -12
- data/spec/macros/timetable.rb +0 -11
- data/spec/macros/xy.rb +0 -11
- data/spec/macros/z_qnh.rb +0 -11
- data/spec/sounds/failure.mp3 +0 -0
- data/spec/sounds/success.mp3 +0 -0
- data/spec/spec_helper.rb +0 -62
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
require_relative '../../../spec_helper'
|
|
2
|
-
|
|
3
|
-
describe AIXM::Feature::NavigationalAid do
|
|
4
|
-
subject do
|
|
5
|
-
AIXM::Feature::NavigationalAid.send(:new,
|
|
6
|
-
organisation: AIXM::Factory.organisation,
|
|
7
|
-
id: 'XXX',
|
|
8
|
-
xy: AIXM::Factory.xy
|
|
9
|
-
)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe :id= do
|
|
13
|
-
it "fails on invalid values" do
|
|
14
|
-
_{ subject.id = 123 }.must_raise ArgumentError
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "upcases value" do
|
|
18
|
-
_(subject.tap { |s| s.id = 'lol' }.id).must_equal 'LOL'
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe :name= do
|
|
23
|
-
it "fails on invalid values" do
|
|
24
|
-
_([:foobar, 123]).wont_be_written_to subject, :name
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "accepts nil value" do
|
|
28
|
-
_([nil]).must_be_written_to subject, :name
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "upcases and transcodes value" do
|
|
32
|
-
_(subject.tap { |s| s.name = 'löl' }.name).must_equal 'LOEL'
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe :xy= do
|
|
37
|
-
macro :xy
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
describe :z= do
|
|
41
|
-
macro :z_qnh
|
|
42
|
-
|
|
43
|
-
it "accepts nil value" do
|
|
44
|
-
_([nil]).must_be_written_to subject, :z
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe :remarks= do
|
|
49
|
-
macro :remarks
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
end
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
require_relative '../../../spec_helper'
|
|
2
|
-
|
|
3
|
-
describe AIXM::Feature::ObstacleGroup do
|
|
4
|
-
describe "unlinked obstacle group" do
|
|
5
|
-
subject do
|
|
6
|
-
AIXM.obstacle_group(name: "Mirmande éoliennes")
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
describe :initialize do
|
|
10
|
-
it "sets defaults" do
|
|
11
|
-
subject = AIXM.obstacle_group(
|
|
12
|
-
name: "Mirmande éoliennes"
|
|
13
|
-
)
|
|
14
|
-
_(subject.obstacles).must_equal []
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe :name= do
|
|
19
|
-
it "fails on invalid values" do
|
|
20
|
-
_([:foobar, 123]).wont_be_written_to subject, :name
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "upcases and transcodes valid values" do
|
|
24
|
-
_(subject.name).must_equal 'MIRMANDE EOLIENNES'
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe :xy_accuracy= do
|
|
29
|
-
it "fails on invalid values" do
|
|
30
|
-
_([:foobar, 123]).wont_be_written_to subject, :xy_accuracy
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "accepts valid values" do
|
|
34
|
-
_([nil, AIXM::Factory.d, AIXM.d(0, :m)]).must_be_written_to subject, :xy_accuracy
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
describe :z_accuracy= do
|
|
39
|
-
it "fails on invalid values" do
|
|
40
|
-
_([:foobar, 123]).wont_be_written_to subject, :z_accuracy
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "accepts valid values" do
|
|
44
|
-
_([nil, AIXM::Factory.d, AIXM.d(0, :m)]).must_be_written_to subject, :z_accuracy
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe :remarks= do
|
|
49
|
-
macro :remarks
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe :add_obstacle do
|
|
53
|
-
it "adds an obstacle to the obstacle group" do
|
|
54
|
-
subject.add_obstacle(AIXM::Factory.obstacle)
|
|
55
|
-
_(subject.obstacles.count).must_equal 1
|
|
56
|
-
_(subject.obstacles.first.obstacle_group).must_equal subject
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe :to_xml do
|
|
61
|
-
subject do
|
|
62
|
-
AIXM::Factory.unlinked_obstacle_group
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "builds correct AIXM" do
|
|
66
|
-
_(subject.to_xml).must_equal <<~END
|
|
67
|
-
<!-- Obstacle: [wind_turbine] 44.67501389N 004.87256667E LA TEISSONIERE 1 -->
|
|
68
|
-
<Obs>
|
|
69
|
-
<ObsUid>
|
|
70
|
-
<geoLat>444030.05N</geoLat>
|
|
71
|
-
<geoLong>0045221.24E</geoLong>
|
|
72
|
-
</ObsUid>
|
|
73
|
-
<txtName>LA TEISSONIERE 1</txtName>
|
|
74
|
-
<txtDescrType>WINDTURBINE</txtDescrType>
|
|
75
|
-
<codeGroup>Y</codeGroup>
|
|
76
|
-
<codeLgt>N</codeLgt>
|
|
77
|
-
<codeDatum>WGE</codeDatum>
|
|
78
|
-
<valGeoAccuracy>50</valGeoAccuracy>
|
|
79
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
80
|
-
<valElev>1764</valElev>
|
|
81
|
-
<valElevAccuracy>33</valElevAccuracy>
|
|
82
|
-
<valHgt>262</valHgt>
|
|
83
|
-
<uomDistVer>FT</uomDistVer>
|
|
84
|
-
</Obs>
|
|
85
|
-
<!-- Obstacle: [wind_turbine] 44.67946667N 004.87381111E LA TEISSONIERE 2 -->
|
|
86
|
-
<Obs>
|
|
87
|
-
<ObsUid>
|
|
88
|
-
<geoLat>444046.08N</geoLat>
|
|
89
|
-
<geoLong>0045225.72E</geoLong>
|
|
90
|
-
</ObsUid>
|
|
91
|
-
<txtName>LA TEISSONIERE 2</txtName>
|
|
92
|
-
<txtDescrType>WINDTURBINE</txtDescrType>
|
|
93
|
-
<codeGroup>Y</codeGroup>
|
|
94
|
-
<codeLgt>N</codeLgt>
|
|
95
|
-
<codeDatum>WGE</codeDatum>
|
|
96
|
-
<valGeoAccuracy>50</valGeoAccuracy>
|
|
97
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
98
|
-
<valElev>1738</valElev>
|
|
99
|
-
<valElevAccuracy>33</valElevAccuracy>
|
|
100
|
-
<valHgt>262</valHgt>
|
|
101
|
-
<uomDistVer>FT</uomDistVer>
|
|
102
|
-
</Obs>
|
|
103
|
-
END
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "builds correct OFMX" do
|
|
107
|
-
AIXM.ofmx!
|
|
108
|
-
_(subject.to_xml).must_equal <<~END
|
|
109
|
-
<!-- Obstacle group: MIRMANDE EOLIENNES -->
|
|
110
|
-
<Ogr>
|
|
111
|
-
<OgrUid>
|
|
112
|
-
<txtName>MIRMANDE EOLIENNES</txtName>
|
|
113
|
-
<geoLat>44.67501389N</geoLat>
|
|
114
|
-
<geoLong>004.87256667E</geoLong>
|
|
115
|
-
</OgrUid>
|
|
116
|
-
<codeDatum>WGE</codeDatum>
|
|
117
|
-
<valGeoAccuracy>50</valGeoAccuracy>
|
|
118
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
119
|
-
<valElevAccuracy>33</valElevAccuracy>
|
|
120
|
-
<uomElevAccuracy>FT</uomElevAccuracy>
|
|
121
|
-
<txtRmk>Extension planned</txtRmk>
|
|
122
|
-
</Ogr>
|
|
123
|
-
<!-- Obstacle: [wind_turbine] 44.67501389N 004.87256667E LA TEISSONIERE 1 -->
|
|
124
|
-
<Obs>
|
|
125
|
-
<ObsUid>
|
|
126
|
-
<OgrUid>
|
|
127
|
-
<txtName>MIRMANDE EOLIENNES</txtName>
|
|
128
|
-
<geoLat>44.67501389N</geoLat>
|
|
129
|
-
<geoLong>004.87256667E</geoLong>
|
|
130
|
-
</OgrUid>
|
|
131
|
-
<geoLat>44.67501389N</geoLat>
|
|
132
|
-
<geoLong>004.87256667E</geoLong>
|
|
133
|
-
</ObsUid>
|
|
134
|
-
<txtName>LA TEISSONIERE 1</txtName>
|
|
135
|
-
<codeType>WINDTURBINE</codeType>
|
|
136
|
-
<codeGroup>Y</codeGroup>
|
|
137
|
-
<codeLgt>N</codeLgt>
|
|
138
|
-
<codeMarking>N</codeMarking>
|
|
139
|
-
<codeDatum>WGE</codeDatum>
|
|
140
|
-
<valElev>1764</valElev>
|
|
141
|
-
<valHgt>262</valHgt>
|
|
142
|
-
<uomDistVer>FT</uomDistVer>
|
|
143
|
-
<codeHgtAccuracy>N</codeHgtAccuracy>
|
|
144
|
-
<valRadius>80</valRadius>
|
|
145
|
-
<uomRadius>M</uomRadius>
|
|
146
|
-
</Obs>
|
|
147
|
-
<!-- Obstacle: [wind_turbine] 44.67946667N 004.87381111E LA TEISSONIERE 2 -->
|
|
148
|
-
<Obs>
|
|
149
|
-
<ObsUid>
|
|
150
|
-
<OgrUid>
|
|
151
|
-
<txtName>MIRMANDE EOLIENNES</txtName>
|
|
152
|
-
<geoLat>44.67501389N</geoLat>
|
|
153
|
-
<geoLong>004.87256667E</geoLong>
|
|
154
|
-
</OgrUid>
|
|
155
|
-
<geoLat>44.67946667N</geoLat>
|
|
156
|
-
<geoLong>004.87381111E</geoLong>
|
|
157
|
-
</ObsUid>
|
|
158
|
-
<txtName>LA TEISSONIERE 2</txtName>
|
|
159
|
-
<codeType>WINDTURBINE</codeType>
|
|
160
|
-
<codeGroup>Y</codeGroup>
|
|
161
|
-
<codeLgt>N</codeLgt>
|
|
162
|
-
<codeMarking>N</codeMarking>
|
|
163
|
-
<codeDatum>WGE</codeDatum>
|
|
164
|
-
<valElev>1738</valElev>
|
|
165
|
-
<valHgt>262</valHgt>
|
|
166
|
-
<uomDistVer>FT</uomDistVer>
|
|
167
|
-
<codeHgtAccuracy>N</codeHgtAccuracy>
|
|
168
|
-
<valRadius>80</valRadius>
|
|
169
|
-
<uomRadius>M</uomRadius>
|
|
170
|
-
</Obs>
|
|
171
|
-
END
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "builds OFMX with mid" do
|
|
175
|
-
AIXM.ofmx!
|
|
176
|
-
AIXM.config.mid_region = 'LF'
|
|
177
|
-
_(subject.to_xml).must_match /<OgrUid mid="c099ea7c-2056-3921-5c1c-b28090537332">/
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
describe "linked obstacle group" do
|
|
183
|
-
subject do
|
|
184
|
-
AIXM.obstacle_group(name: "Mirmande éoliennes")
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
describe :add_obstacle do
|
|
188
|
-
it "adds an obstacle to the obstacle group and links it to previous" do
|
|
189
|
-
subject.add_obstacle(AIXM::Factory.obstacle)
|
|
190
|
-
subject.add_obstacle(AIXM::Factory.obstacle, linked_to: :previous, link_type: :cable)
|
|
191
|
-
_(subject.obstacles.count).must_equal 2
|
|
192
|
-
_(subject.obstacles.last.linked_to).must_equal subject.obstacles.first
|
|
193
|
-
_(subject.obstacles.last.link_type).must_equal :cable
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "adds an obstacle to the obstacle group and links it to another obstacle" do
|
|
197
|
-
subject.add_obstacle(AIXM::Factory.obstacle)
|
|
198
|
-
subject.add_obstacle(AIXM::Factory.obstacle, linked_to: subject.obstacles.first, link_type: :solid)
|
|
199
|
-
_(subject.obstacles.count).must_equal 2
|
|
200
|
-
_(subject.obstacles.last.linked_to).must_equal subject.obstacles.first
|
|
201
|
-
_(subject.obstacles.last.link_type).must_equal :solid
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
describe :to_xml do
|
|
206
|
-
subject do
|
|
207
|
-
AIXM::Factory.linked_obstacle_group
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
it "builds correct AIXM" do
|
|
211
|
-
_(subject.to_xml).must_equal <<~END
|
|
212
|
-
<!-- Obstacle: [mast] 52.29639722N 002.10675278W DROITWICH LW NORTH -->
|
|
213
|
-
<Obs>
|
|
214
|
-
<ObsUid>
|
|
215
|
-
<geoLat>521747.03N</geoLat>
|
|
216
|
-
<geoLong>0020624.31W</geoLong>
|
|
217
|
-
</ObsUid>
|
|
218
|
-
<txtName>DROITWICH LW NORTH</txtName>
|
|
219
|
-
<txtDescrType>MAST</txtDescrType>
|
|
220
|
-
<codeGroup>Y</codeGroup>
|
|
221
|
-
<codeLgt>N</codeLgt>
|
|
222
|
-
<codeDatum>WGE</codeDatum>
|
|
223
|
-
<valGeoAccuracy>0</valGeoAccuracy>
|
|
224
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
225
|
-
<valElev>848</valElev>
|
|
226
|
-
<valElevAccuracy>0</valElevAccuracy>
|
|
227
|
-
<valHgt>700</valHgt>
|
|
228
|
-
<uomDistVer>FT</uomDistVer>
|
|
229
|
-
</Obs>
|
|
230
|
-
<!-- Obstacle: [mast] 52.29457778N 002.10568611W DROITWICH LW NORTH -->
|
|
231
|
-
<Obs>
|
|
232
|
-
<ObsUid>
|
|
233
|
-
<geoLat>521740.48N</geoLat>
|
|
234
|
-
<geoLong>0020620.47W</geoLong>
|
|
235
|
-
</ObsUid>
|
|
236
|
-
<txtName>DROITWICH LW NORTH</txtName>
|
|
237
|
-
<txtDescrType>MAST</txtDescrType>
|
|
238
|
-
<codeGroup>Y</codeGroup>
|
|
239
|
-
<codeLgt>N</codeLgt>
|
|
240
|
-
<codeDatum>WGE</codeDatum>
|
|
241
|
-
<valGeoAccuracy>0</valGeoAccuracy>
|
|
242
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
243
|
-
<valElev>848</valElev>
|
|
244
|
-
<valElevAccuracy>0</valElevAccuracy>
|
|
245
|
-
<valHgt>700</valHgt>
|
|
246
|
-
<uomDistVer>FT</uomDistVer>
|
|
247
|
-
</Obs>
|
|
248
|
-
END
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it "builds correct OFMX" do
|
|
252
|
-
AIXM.ofmx!
|
|
253
|
-
_(subject.to_xml).must_equal <<~END
|
|
254
|
-
<!-- Obstacle group: DROITWICH LONGWAVE ANTENNA -->
|
|
255
|
-
<Ogr>
|
|
256
|
-
<OgrUid>
|
|
257
|
-
<txtName>DROITWICH LONGWAVE ANTENNA</txtName>
|
|
258
|
-
<geoLat>52.29639722N</geoLat>
|
|
259
|
-
<geoLong>002.10675278W</geoLong>
|
|
260
|
-
</OgrUid>
|
|
261
|
-
<codeDatum>WGE</codeDatum>
|
|
262
|
-
<valGeoAccuracy>0</valGeoAccuracy>
|
|
263
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
264
|
-
<valElevAccuracy>0</valElevAccuracy>
|
|
265
|
-
<uomElevAccuracy>FT</uomElevAccuracy>
|
|
266
|
-
<txtRmk>Destruction planned</txtRmk>
|
|
267
|
-
</Ogr>
|
|
268
|
-
<!-- Obstacle: [mast] 52.29639722N 002.10675278W DROITWICH LW NORTH -->
|
|
269
|
-
<Obs>
|
|
270
|
-
<ObsUid>
|
|
271
|
-
<OgrUid>
|
|
272
|
-
<txtName>DROITWICH LONGWAVE ANTENNA</txtName>
|
|
273
|
-
<geoLat>52.29639722N</geoLat>
|
|
274
|
-
<geoLong>002.10675278W</geoLong>
|
|
275
|
-
</OgrUid>
|
|
276
|
-
<geoLat>52.29639722N</geoLat>
|
|
277
|
-
<geoLong>002.10675278W</geoLong>
|
|
278
|
-
</ObsUid>
|
|
279
|
-
<txtName>DROITWICH LW NORTH</txtName>
|
|
280
|
-
<codeType>MAST</codeType>
|
|
281
|
-
<codeGroup>Y</codeGroup>
|
|
282
|
-
<codeLgt>N</codeLgt>
|
|
283
|
-
<codeMarking>N</codeMarking>
|
|
284
|
-
<codeDatum>WGE</codeDatum>
|
|
285
|
-
<valElev>848</valElev>
|
|
286
|
-
<valHgt>700</valHgt>
|
|
287
|
-
<uomDistVer>FT</uomDistVer>
|
|
288
|
-
<codeHgtAccuracy>Y</codeHgtAccuracy>
|
|
289
|
-
<valRadius>200</valRadius>
|
|
290
|
-
<uomRadius>M</uomRadius>
|
|
291
|
-
</Obs>
|
|
292
|
-
<!-- Obstacle: [mast] 52.29457778N 002.10568611W DROITWICH LW NORTH -->
|
|
293
|
-
<Obs>
|
|
294
|
-
<ObsUid>
|
|
295
|
-
<OgrUid>
|
|
296
|
-
<txtName>DROITWICH LONGWAVE ANTENNA</txtName>
|
|
297
|
-
<geoLat>52.29639722N</geoLat>
|
|
298
|
-
<geoLong>002.10675278W</geoLong>
|
|
299
|
-
</OgrUid>
|
|
300
|
-
<geoLat>52.29457778N</geoLat>
|
|
301
|
-
<geoLong>002.10568611W</geoLong>
|
|
302
|
-
</ObsUid>
|
|
303
|
-
<txtName>DROITWICH LW NORTH</txtName>
|
|
304
|
-
<codeType>MAST</codeType>
|
|
305
|
-
<codeGroup>Y</codeGroup>
|
|
306
|
-
<codeLgt>N</codeLgt>
|
|
307
|
-
<codeMarking>N</codeMarking>
|
|
308
|
-
<codeDatum>WGE</codeDatum>
|
|
309
|
-
<valElev>848</valElev>
|
|
310
|
-
<valHgt>700</valHgt>
|
|
311
|
-
<uomDistVer>FT</uomDistVer>
|
|
312
|
-
<codeHgtAccuracy>Y</codeHgtAccuracy>
|
|
313
|
-
<valRadius>200</valRadius>
|
|
314
|
-
<uomRadius>M</uomRadius>
|
|
315
|
-
<ObsUidLink>
|
|
316
|
-
<OgrUid>
|
|
317
|
-
<txtName>DROITWICH LONGWAVE ANTENNA</txtName>
|
|
318
|
-
<geoLat>52.29639722N</geoLat>
|
|
319
|
-
<geoLong>002.10675278W</geoLong>
|
|
320
|
-
</OgrUid>
|
|
321
|
-
<geoLat>52.29639722N</geoLat>
|
|
322
|
-
<geoLong>002.10675278W</geoLong>
|
|
323
|
-
</ObsUidLink>
|
|
324
|
-
<codeLinkType>CABLE</codeLinkType>
|
|
325
|
-
</Obs>
|
|
326
|
-
END
|
|
327
|
-
end
|
|
328
|
-
end
|
|
329
|
-
end
|
|
330
|
-
end
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
require_relative '../../../spec_helper'
|
|
2
|
-
|
|
3
|
-
describe AIXM::Feature::Obstacle do
|
|
4
|
-
subject do
|
|
5
|
-
AIXM::Factory.obstacle
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe :initialize do
|
|
9
|
-
it "sets defaults" do
|
|
10
|
-
subject = AIXM.obstacle(
|
|
11
|
-
type: :tower,
|
|
12
|
-
xy: AIXM.xy(lat: %q(48°51'29.7"N), long: %q(002°17'40.52"E)),
|
|
13
|
-
radius: AIXM.d(88, :m),
|
|
14
|
-
z: AIXM.z(1187 , :qnh)
|
|
15
|
-
)
|
|
16
|
-
_(subject).wont_be :lighting
|
|
17
|
-
_(subject).wont_be :marking
|
|
18
|
-
_(subject).wont_be :height_accurate
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe :name= do
|
|
23
|
-
it "fails on invalid values" do
|
|
24
|
-
_([:foobar, 123]).wont_be_written_to subject, :name
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "upcases and transcodes valid values" do
|
|
28
|
-
_(subject.tap { |s| s.name = 'Teufelsbrücke' }.name).must_equal 'TEUFELSBRUECKE'
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
describe :type= do
|
|
33
|
-
it "fails on invalid values" do
|
|
34
|
-
_([nil, :foobar]).wont_be_written_to subject, :type
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "looks up valid values" do
|
|
38
|
-
_(subject.tap { |s| s.type = :WINDTURBINE }.type).must_equal :wind_turbine
|
|
39
|
-
_(subject.tap { |s| s.type = :TOWER }.type).must_equal :tower
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
describe :xy= do
|
|
44
|
-
macro :xy
|
|
45
|
-
|
|
46
|
-
it "fails on nil values" do
|
|
47
|
-
_([nil]).wont_be_written_to subject, :xy
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe :radius= do
|
|
52
|
-
it "fails on invalid values" do
|
|
53
|
-
_([:foobar, 123, AIXM.d(0, :m)]).wont_be_written_to subject, :radius
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "accepts valid values" do
|
|
57
|
-
_([AIXM::Factory.d, nil]).must_be_written_to subject, :radius
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe :z= do
|
|
62
|
-
macro :z_qnh
|
|
63
|
-
|
|
64
|
-
it "fails on nil values" do
|
|
65
|
-
_([nil]).wont_be_written_to subject, :z
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
describe :lighting= do
|
|
70
|
-
it "fails on invalid values" do
|
|
71
|
-
_([:foobar, 123]).wont_be_written_to subject, :lighting
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "accepts valid values" do
|
|
75
|
-
_([true, false, nil]).must_be_written_to subject, :lighting
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
describe :lighting_remarks= do
|
|
80
|
-
it "accepts nil value" do
|
|
81
|
-
_([nil]).must_be_written_to subject, :lighting_remarks
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "stringifies valid values" do
|
|
85
|
-
_(subject.tap { |s| s.lighting_remarks = 'foobar' }.lighting_remarks).must_equal 'foobar'
|
|
86
|
-
_(subject.tap { |s| s.lighting_remarks = 123 }.lighting_remarks).must_equal '123'
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe :marking= do
|
|
91
|
-
it "fails on invalid values" do
|
|
92
|
-
_([:foobar, 123]).wont_be_written_to subject, :marking
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it "accepts valid values" do
|
|
96
|
-
_([true, false, nil]).must_be_written_to subject, :marking
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
describe :marking_remarks= do
|
|
101
|
-
it "accepts nil value" do
|
|
102
|
-
_([nil]).must_be_written_to subject, :marking_remarks
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "stringifies valid values" do
|
|
106
|
-
_(subject.tap { |s| s.marking_remarks = 'foobar' }.marking_remarks).must_equal 'foobar'
|
|
107
|
-
_(subject.tap { |s| s.marking_remarks = 123 }.marking_remarks).must_equal '123'
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
describe :height= do
|
|
112
|
-
it "fails on invalid values" do
|
|
113
|
-
_([:foobar, 123, AIXM.d(0, :m)]).wont_be_written_to subject, :height
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "accepts valid values" do
|
|
117
|
-
_([nil, AIXM::Factory.d]).must_be_written_to subject, :height
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
describe :xy_accuracy= do
|
|
122
|
-
it "fails on invalid values" do
|
|
123
|
-
_([:foobar, 123]).wont_be_written_to subject, :xy_accuracy
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "accepts valid values" do
|
|
127
|
-
_([nil, AIXM::Factory.d, AIXM.d(0, :m)]).must_be_written_to subject, :xy_accuracy
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
describe :z_accuracy= do
|
|
132
|
-
it "fails on invalid values" do
|
|
133
|
-
_([:foobar, 123]).wont_be_written_to subject, :z_accuracy
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
it "accepts valid values" do
|
|
137
|
-
_([nil, AIXM::Factory.d, AIXM.d(0, :m)]).must_be_written_to subject, :z_accuracy
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
describe :height_accurate= do
|
|
142
|
-
it "fails on invalid values" do
|
|
143
|
-
_([:foobar, 123]).wont_be_written_to subject, :height_accurate
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "accepts valid values" do
|
|
147
|
-
_([true, false, nil]).must_be_written_to subject, :height_accurate
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
describe :valid_from= do
|
|
152
|
-
it "fails on invalid values" do
|
|
153
|
-
_(['foobar', '2018-01-77']).wont_be_written_to subject, :valid_from
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it "accepts nil value" do
|
|
157
|
-
_([nil]).must_be_written_to subject, :valid_from
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
it "parses dates and times" do
|
|
161
|
-
string = '2018-01-01 12:00:00 +0100'
|
|
162
|
-
_(subject.tap { |s| s.valid_from = string }.valid_from).must_equal Time.parse(string)
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
describe :valid_until= do
|
|
167
|
-
it "fails on invalid values" do
|
|
168
|
-
_(['foobar', '2018-01-77']).wont_be_written_to subject, :valid_until
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
it "accepts nil value" do
|
|
172
|
-
_([nil]).must_be_written_to subject, :valid_until
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "parses dates and times" do
|
|
176
|
-
string = '2018-01-01 12:00:00 +0100'
|
|
177
|
-
_(subject.tap { |s| s.valid_until = string }.valid_until).must_equal Time.parse(string)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
describe :remarks= do
|
|
182
|
-
macro :remarks
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
describe :grouped? do
|
|
186
|
-
it "returns false since single obstacles are not grouped" do
|
|
187
|
-
_(subject).wont_be :grouped?
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
describe :linked? do
|
|
192
|
-
subject do
|
|
193
|
-
AIXM::Factory.unlinked_obstacle_group.obstacles.first
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "returns false for unlinked obstacles" do
|
|
197
|
-
_(subject).wont_be :linked?
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
it "returns true for linked obstacles" do
|
|
201
|
-
subject = AIXM::Factory.linked_obstacle_group.obstacles.last
|
|
202
|
-
_(subject).must_be :linked?
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
describe :to_xml do
|
|
207
|
-
it "builds correct AIXM" do
|
|
208
|
-
_(subject.to_xml).must_equal <<~END
|
|
209
|
-
<!-- Obstacle: [tower] 48.85825000N 002.29458889E EIFFEL TOWER -->
|
|
210
|
-
<Obs>
|
|
211
|
-
<ObsUid>
|
|
212
|
-
<geoLat>485129.70N</geoLat>
|
|
213
|
-
<geoLong>0021740.52E</geoLong>
|
|
214
|
-
</ObsUid>
|
|
215
|
-
<txtName>EIFFEL TOWER</txtName>
|
|
216
|
-
<txtDescrType>TOWER</txtDescrType>
|
|
217
|
-
<codeGroup>N</codeGroup>
|
|
218
|
-
<codeLgt>Y</codeLgt>
|
|
219
|
-
<txtDescrLgt>red strobes</txtDescrLgt>
|
|
220
|
-
<codeDatum>WGE</codeDatum>
|
|
221
|
-
<valGeoAccuracy>2</valGeoAccuracy>
|
|
222
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
223
|
-
<valElev>1187</valElev>
|
|
224
|
-
<valElevAccuracy>3</valElevAccuracy>
|
|
225
|
-
<valHgt>1063</valHgt>
|
|
226
|
-
<uomDistVer>FT</uomDistVer>
|
|
227
|
-
<txtRmk>Temporary light installations (white strobes, gyro light etc)</txtRmk>
|
|
228
|
-
</Obs>
|
|
229
|
-
END
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it "builds correct OFMX" do
|
|
233
|
-
AIXM.ofmx!
|
|
234
|
-
_(subject.to_xml).must_equal <<~END
|
|
235
|
-
<!-- Obstacle group: EIFFEL TOWER -->
|
|
236
|
-
<Ogr>
|
|
237
|
-
<OgrUid>
|
|
238
|
-
<txtName>EIFFEL TOWER</txtName>
|
|
239
|
-
<geoLat>48.85825000N</geoLat>
|
|
240
|
-
<geoLong>002.29458889E</geoLong>
|
|
241
|
-
</OgrUid>
|
|
242
|
-
<codeDatum>WGE</codeDatum>
|
|
243
|
-
<valGeoAccuracy>2</valGeoAccuracy>
|
|
244
|
-
<uomGeoAccuracy>M</uomGeoAccuracy>
|
|
245
|
-
<valElevAccuracy>3</valElevAccuracy>
|
|
246
|
-
<uomElevAccuracy>FT</uomElevAccuracy>
|
|
247
|
-
</Ogr>
|
|
248
|
-
<!-- Obstacle: [tower] 48.85825000N 002.29458889E EIFFEL TOWER -->
|
|
249
|
-
<Obs>
|
|
250
|
-
<ObsUid>
|
|
251
|
-
<OgrUid>
|
|
252
|
-
<txtName>EIFFEL TOWER</txtName>
|
|
253
|
-
<geoLat>48.85825000N</geoLat>
|
|
254
|
-
<geoLong>002.29458889E</geoLong>
|
|
255
|
-
</OgrUid>
|
|
256
|
-
<geoLat>48.85825000N</geoLat>
|
|
257
|
-
<geoLong>002.29458889E</geoLong>
|
|
258
|
-
</ObsUid>
|
|
259
|
-
<txtName>EIFFEL TOWER</txtName>
|
|
260
|
-
<codeType>TOWER</codeType>
|
|
261
|
-
<codeGroup>N</codeGroup>
|
|
262
|
-
<codeLgt>Y</codeLgt>
|
|
263
|
-
<txtDescrLgt>red strobes</txtDescrLgt>
|
|
264
|
-
<codeDatum>WGE</codeDatum>
|
|
265
|
-
<valElev>1187</valElev>
|
|
266
|
-
<valHgt>1063</valHgt>
|
|
267
|
-
<uomDistVer>FT</uomDistVer>
|
|
268
|
-
<codeHgtAccuracy>Y</codeHgtAccuracy>
|
|
269
|
-
<valRadius>88</valRadius>
|
|
270
|
-
<uomRadius>M</uomRadius>
|
|
271
|
-
<datetimeValidWef>2018-01-01T12:00:00+01:00</datetimeValidWef>
|
|
272
|
-
<datetimeValidTil>2019-01-01T12:00:00+01:00</datetimeValidTil>
|
|
273
|
-
<txtRmk>Temporary light installations (white strobes, gyro light etc)</txtRmk>
|
|
274
|
-
</Obs>
|
|
275
|
-
END
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
it "builds OFMX with mid" do
|
|
279
|
-
AIXM.ofmx!
|
|
280
|
-
AIXM.config.mid_region = 'LF'
|
|
281
|
-
_(subject.to_xml).must_match /<ObsUid mid="864b252b-0b1d-66c4-22cd-14dbda287467">/
|
|
282
|
-
end
|
|
283
|
-
end
|
|
284
|
-
end
|