aixm 0.3.11 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d86771a98ab156be9da1487e7e2e11615bcd63590824108717a51f07c044e241
4
- data.tar.gz: b6fc6d7c2803169145153d434f1675f161be6ae731b54eb1d53b6d2fbcf4807b
3
+ metadata.gz: 2f4efdae60e160732c8f30262673f01b49d6dd53d5c5e9bc2d8c395cf696ccae
4
+ data.tar.gz: 7b129a858e6c6d0eb7545d4a32910243e7a8ecd00a8895698f4ae69fcaed33f2
5
5
  SHA512:
6
- metadata.gz: e537adc538ba520a2f0e891da01ccb13e768a5e183c8a042fbe3bf55f63bfc9f2a66125cf6a19b1882e7d646d8c9b0f848fc551f095a24323f24216d9a8036a1
7
- data.tar.gz: 5a3884e00a329f243835648bce2bc13f1cd0ae701113dc89a86f23e83ebe9a82abf4af7a5c6aa87a8f22b1d7c49bc94fd222b2752a5a9bef42276936def12e60
6
+ metadata.gz: 98115e7b0f93f82e976235045afdff88b3b6a99b256620de733b4b4741ffa7fb769e6bb92aae86657d6ae57b5744aef5df82a634b22adb5ae81b9db18a7c1531
7
+ data.tar.gz: fd3bf40b77d4cfef51465b4e1806382465a4eee86abd8c74c3639763a627653a7832696395bab9673dd6433458bef8474871b7dcd121533891df3c911a429baf
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.0.0
2
+
3
+ #### Breaking Changes
4
+ * Move `Ase->txtLocalType` up into `AseUid` for OFMX
5
+
6
+ #### Additions
7
+ * Add `AIXM::Component::Geometry::RhumbLine`
8
+
1
9
  ## 0.3.11
2
10
 
3
11
  #### Breaking Changes
data/lib/aixm/classes.rb CHANGED
@@ -25,10 +25,11 @@ module AIXM
25
25
  layer: 'AIXM::Component::Layer',
26
26
  geometry: 'AIXM::Component::Geometry',
27
27
  vertical_limit: 'AIXM::Component::VerticalLimit',
28
+ point: 'AIXM::Component::Geometry::Point',
29
+ rhumb_line: 'AIXM::Component::Geometry::RhumbLine',
28
30
  arc: 'AIXM::Component::Geometry::Arc',
29
- border: 'AIXM::Component::Geometry::Border',
30
31
  circle: 'AIXM::Component::Geometry::Circle',
31
- point: 'AIXM::Component::Geometry::Point',
32
+ border: 'AIXM::Component::Geometry::Border',
32
33
  dme: 'AIXM::Feature::NavigationalAid::DME',
33
34
  designated_point: 'AIXM::Feature::NavigationalAid::DesignatedPoint',
34
35
  marker: 'AIXM::Feature::NavigationalAid::Marker',
@@ -17,7 +17,7 @@ module AIXM
17
17
  include AIXM::Association
18
18
 
19
19
  # @!method geometry
20
- # @return [AIXM::Component::Geometry] geometry the arc belongs to
20
+ # @return [AIXM::Component::Geometry] geometry this segment belongs to
21
21
  belongs_to :geometry, as: :segment
22
22
 
23
23
  # @return [AIXM::XY] center point
@@ -4,7 +4,8 @@ module AIXM
4
4
  module Component
5
5
  class Geometry
6
6
 
7
- # Points are defined by {#xy} coordinates.
7
+ # Either an individual point or the starting point of a great circle
8
+ # line. Defined by {#xy} coordinates.
8
9
  #
9
10
  # ===Cheat Sheet in Pseudo Code:
10
11
  # point = AIXM.point(
@@ -16,7 +17,7 @@ module AIXM
16
17
  include AIXM::Association
17
18
 
18
19
  # @!method geometry
19
- # @return [AIXM::Component::Geometry] geometry the arc belongs to
20
+ # @return [AIXM::Component::Geometry] geometry this segment belongs to
20
21
  belongs_to :geometry, as: :segment
21
22
 
22
23
  # @return [AIXM::XY] (starting) point
@@ -0,0 +1,54 @@
1
+ using AIXM::Refinements
2
+
3
+ module AIXM
4
+ module Component
5
+ class Geometry
6
+
7
+ # Starting point of a rhumb line which describes a spiral on a sphere
8
+ # crossing all meridians at the same angle. Defined by {#xy} coordinates.
9
+ #
10
+ # ===Cheat Sheet in Pseudo Code:
11
+ # point = AIXM.rhumb_line(
12
+ # xy: AIXM.xy
13
+ # )
14
+ #
15
+ # @see https://gitlab.com/openflightmaps/ofmx/wikis/Airspace#rhumb-line
16
+ class RhumbLine
17
+ include AIXM::Association
18
+
19
+ # @!method geometry
20
+ # @return [AIXM::Component::Geometry] geometry this segment belongs to
21
+ belongs_to :geometry, as: :segment
22
+
23
+ # @return [AIXM::XY] (starting) point
24
+ attr_reader :xy
25
+
26
+ def initialize(xy:)
27
+ self.xy = xy
28
+ end
29
+
30
+ # @return [String]
31
+ def inspect
32
+ %Q(#<#{self.class} xy="#{xy}">)
33
+ end
34
+
35
+ def xy=(value)
36
+ fail(ArgumentError, "invalid xy") unless value.is_a? AIXM::XY
37
+ @xy = value
38
+ end
39
+
40
+ # @return [String] AIXM or OFMX markup
41
+ def to_xml
42
+ builder = Builder::XmlMarkup.new(indent: 2)
43
+ builder.Avx do |avx|
44
+ avx.codeType('RHL')
45
+ avx.geoLat(xy.lat(AIXM.schema))
46
+ avx.geoLong(xy.long(AIXM.schema))
47
+ avx.codeDatum('WGE')
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -31,16 +31,18 @@ module AIXM
31
31
 
32
32
  # @!method segments
33
33
  # @return [Array<AIXM::Component::Geometry::Point,
34
+ # AIXM::Component::Geometry::RhumbLine
34
35
  # AIXM::Component::Geometry::Arc,
35
- # AIXM::Component::Geometry::Border,
36
- # AIXM::Component::Geometry::Circle>] points, arcs, borders or circle
36
+ # AIXM::Component::Geometry::Circle,
37
+ # AIXM::Component::Geometry::Border>] points, rhumb lines, arcs, borders or circle
37
38
  # @!method add_segment(segment)
38
39
  # @param segment [AIXM::Component::Geometry::Point,
40
+ # AIXM::Component::Geometry::RhumbLine,
39
41
  # AIXM::Component::Geometry::Arc,
40
- # AIXM::Component::Geometry::Border,
41
- # AIXM::Component::Geometry::Circle]
42
+ # AIXM::Component::Geometry::Circle,
43
+ # AIXM::Component::Geometry::Border]
42
44
  # @return [self]
43
- has_many :segments, accept: %i(point arc border circle)
45
+ has_many :segments, accept: %i(point rhumb_line arc circle border)
44
46
 
45
47
  # @!method airspace
46
48
  # @return [AIXM::Feature::Airspace] airspace the geometry defines
@@ -116,7 +116,7 @@ module AIXM
116
116
  @length = if value
117
117
  fail(ArgumentError, "invalid length") unless value.is_a?(AIXM::D) && value.dist > 0
118
118
  fail(ArgumentError, "invalid length unit") if width && width.unit != value.unit
119
- @length = value
119
+ value
120
120
  end
121
121
  end
122
122
 
@@ -124,7 +124,7 @@ module AIXM
124
124
  @width = if value
125
125
  fail(ArgumentError, "invalid width") unless value.is_a?(AIXM::D) && value.dist > 0
126
126
  fail(ArgumentError, "invalid width unit") if length && length.unit != value.unit
127
- @width = value
127
+ value
128
128
  end
129
129
  end
130
130
 
@@ -45,7 +45,9 @@ module AIXM
45
45
  end
46
46
 
47
47
  def code=(value)
48
- @code = CODES.lookup(value&.to_s&.to_sym, nil) || fail(ArgumentError, "invalid code")
48
+ @code = if value
49
+ CODES.lookup(value&.to_s&.to_sym, nil) || fail(ArgumentError, "invalid code")
50
+ end
49
51
  end
50
52
 
51
53
  def remarks=(value)
data/lib/aixm/config.rb CHANGED
@@ -9,8 +9,8 @@ module AIXM
9
9
  },
10
10
  ofmx: {
11
11
  version: '0',
12
- namespace: 'http://schema.openflightmaps.org/0/OFMX-Snapshot.xsd',
13
- xsd: Pathname(__dir__).join('..', '..', 'schemas', 'ofmx', '0', 'OFMX-Snapshot.xsd'),
12
+ namespace: 'http://schema.openflightmaps.org/0.1/OFMX-Snapshot.xsd',
13
+ xsd: Pathname(__dir__).join('..', '..', 'schemas', 'ofmx', '0.1', 'OFMX-Snapshot.xsd'),
14
14
  root: 'OFMX-Snapshot'
15
15
  }
16
16
  }.freeze
data/lib/aixm/document.rb CHANGED
@@ -61,6 +61,10 @@ module AIXM
61
61
  # Compare all ungrouped obstacles and create new obstacle groups whose
62
62
  # members are located within +max_distance+ pairwise.
63
63
  #
64
+ # @note OFMX requires every obstacle, even single ones, to be part of an
65
+ # obstacle group which has a region assigned. For this to work, you must
66
+ # assure every obstacle has a region assigned when using this method.
67
+ #
64
68
  # @param max_distance [AIXM::D] max distance between obstacle group member
65
69
  # pairs (default: 1 NM)
66
70
  # @return [Integer] number of obstacle groups added
@@ -145,6 +145,7 @@ module AIXM
145
145
  builder.tag!(as, ({ region: (region if AIXM.ofmx?) }.compact)) do |tag|
146
146
  tag.codeType(TYPES.key(type).to_s)
147
147
  tag.codeId(id)
148
+ tag.txtLocalType(local_type) if AIXM.ofmx? && local_type && local_type != name
148
149
  end
149
150
  end
150
151
  memoize :to_uid
@@ -166,7 +167,7 @@ module AIXM
166
167
  builder.comment! "Airspace: [#{TYPES.key(type)}] #{name || :UNNAMED}"
167
168
  builder.Ase({ source: (source if AIXM.ofmx?) }.compact) do |ase|
168
169
  ase << to_uid.indent(2)
169
- ase.txtLocalType(local_type) if local_type && local_type != name
170
+ ase.txtLocalType(local_type) if AIXM.aixm? && local_type && local_type != name
170
171
  ase.txtName(name) if name
171
172
  unless layered?
172
173
  ase << layers.first.to_xml.indent(2)
@@ -33,9 +33,11 @@ module AIXM
33
33
  # See {AIXM::Feature::ObstacleGroup} for how to define physical links
34
34
  # between two obstacles (e.g. cables between powerline towers).
35
35
  #
36
- # Please note: Accuracies (+xy_accuracy+ and +z_accuracy+) set on an
37
- # obstacle group are implicitly applied to all obstacles of the group
38
- # unless they have their own, different accuracies set.
36
+ # Please note: As soon as an obstacle is added to an obstacle group, the
37
+ # +xy_accuracy+ and +z_accuracy+ of the obstacle group overwrite whatever
38
+ # is set on the individual obstacles. On the other hand, if the obstacle
39
+ # group has no +source+ set, it will inherit this value from the first
40
+ # obstacle in the group.
39
41
  #
40
42
  # @see https://gitlab.com/openflightmaps/ofmx/wikis/Obstacle
41
43
  class Obstacle < Feature
@@ -218,6 +220,11 @@ module AIXM
218
220
  end
219
221
  private :link_type=
220
222
 
223
+ # @return [Boolean] whether part of an obstacle group
224
+ def grouped?
225
+ obstacle_group && obstacle_group.obstacles.count > 1
226
+ end
227
+
221
228
  # @return [Boolean] whether obstacle is linked to another one
222
229
  def linked?
223
230
  !!linked_to
@@ -225,8 +232,10 @@ module AIXM
225
232
 
226
233
  # @return [String] UID markup
227
234
  def to_uid(as: :ObsUid)
235
+ obstacle_group = self.obstacle_group || singleton_obstacle_group
228
236
  builder = Builder::XmlMarkup.new(indent: 2)
229
- builder.tag!(as, { region: (region if AIXM.ofmx?) }.compact) do |tag|
237
+ builder.tag!(as) do |tag|
238
+ tag << obstacle_group.to_uid.indent(2) if AIXM.ofmx?
230
239
  tag.geoLat((xy.lat(AIXM.schema)))
231
240
  tag.geoLong((xy.long(AIXM.schema)))
232
241
  end
@@ -235,19 +244,19 @@ module AIXM
235
244
 
236
245
  # @return [String] AIXM or OFMX markup
237
246
  def to_xml(delegate: true)
238
- return obstacle_group.to_xml if delegate && obstacle_group && AIXM.ofmx?
247
+ obstacle_group = self.obstacle_group || singleton_obstacle_group
248
+ return obstacle_group.to_xml if delegate && AIXM.ofmx?
239
249
  builder = Builder::XmlMarkup.new(indent: 2)
240
250
  builder.comment! "Obstacle: [#{type}] #{xy.to_s} #{name}".strip
241
251
  builder.Obs({ source: (source if AIXM.ofmx?) }.compact) do |obs|
242
252
  obs << to_uid.indent(2)
243
- obs << obstacle_group.to_uid.indent(2) if obstacle_group && AIXM.ofmx?
244
253
  obs.txtName(name) if name
245
254
  if AIXM.ofmx?
246
255
  obs.codeType(TYPES.key(type).to_s)
247
256
  else
248
257
  obs.txtDescrType(TYPES.key(type).to_s)
249
258
  end
250
- obs.codeGroup(obstacle_group ? 'Y' : 'N') if AIXM.aixm?
259
+ obs.codeGroup(grouped? ? 'Y' : 'N')
251
260
  if AIXM.ofmx?
252
261
  obs.codeLgt(lighting ? 'Y' : 'N') unless lighting.nil?
253
262
  obs.codeMarking(marking ? 'Y' : 'N') unless marking.nil?
@@ -257,14 +266,13 @@ module AIXM
257
266
  obs.txtDescrLgt(lighting_remarks) if lighting_remarks
258
267
  obs.txtDescrMarking(marking_remarks) if marking_remarks
259
268
  obs.codeDatum('WGE')
260
- if accuracy = (xy_accuracy || (obstacle_group&.xy_accuracy if AIXM.aixm?))
261
- obs.valGeoAccuracy(accuracy.dist.trim)
262
- obs.uomGeoAccuracy(accuracy.unit.upcase.to_s)
269
+ if AIXM.aixm? && obstacle_group.xy_accuracy
270
+ obs.valGeoAccuracy(obstacle_group.xy_accuracy.dist.trim)
271
+ obs.uomGeoAccuracy(obstacle_group.xy_accuracy.unit.upcase.to_s)
263
272
  end
264
273
  obs.valElev(z.alt)
265
- if accuracy = (z_accuracy || (obstacle_group&.z_accuracy if AIXM.aixm?))
266
- obs.valElevAccuracy(accuracy.to_ft.dist.round)
267
- obs.uomElevAccuracy('FT') if AIXM.ofmx?
274
+ if AIXM.aixm? && obstacle_group.z_accuracy
275
+ obs.valElevAccuracy(obstacle_group.z_accuracy.to_ft.dist.round)
268
276
  end
269
277
  obs.valHgt(height.to_ft.dist.round) if height
270
278
  obs.uomDistVer('FT')
@@ -276,7 +284,7 @@ module AIXM
276
284
  obs.valRadius(radius.dist.trim)
277
285
  obs.uomRadius(radius.unit.upcase.to_s)
278
286
  end
279
- if linked?
287
+ if grouped? && linked?
280
288
  obs << linked_to.to_uid(as: :ObsUidLink).indent(2)
281
289
  obs.codeLinkType(LINK_TYPES.key(link_type).to_s)
282
290
  end
@@ -287,6 +295,14 @@ module AIXM
287
295
  end
288
296
  end
289
297
 
298
+ private
299
+
300
+ # OFMX requires single, ungrouped obstacles to be the only member of a
301
+ # singleton obstacle group.
302
+ def singleton_obstacle_group
303
+ AIXM.obstacle_group(region: region).add_obstacle self
304
+ end
305
+
290
306
  end
291
307
  end
292
308
  end
@@ -6,11 +6,6 @@ module AIXM
6
6
  # Groups of obstacles which consist of either linked (e.g. power line
7
7
  # towers) or unlinked (e.g. wind turbines) members.
8
8
  #
9
- # Obstacle group should contain at least two obstacles. However, if the
10
- # details of each obstacle of the group are unknown, you may add only one
11
- # virtual obstacle to the group and mention the number of real obstacles
12
- # in it's remarks.
13
- #
14
9
  # ===Cheat Sheet in Pseudo Code:
15
10
  # obstacle_group = AIXM.obstacle_group(
16
11
  # source: String or nil # see remarks below
@@ -35,9 +30,11 @@ module AIXM
35
30
  # link_type: LINK_TYPES
36
31
  # )
37
32
  #
38
- # Please note: Accuracies (+xy_accuracy+ and +z_accuracy+) set on an
39
- # obstacle group are implicitly applied to all obstacles of the group
40
- # unless they have their own, different accuracies set.
33
+ # Please note: As soon as an obstacle is added to an obstacle group, the
34
+ # +xy_accuracy+ and +z_accuracy+ of the obstacle group overwrite whatever
35
+ # is set on the individual obstacles. On the other hand, if the obstacle
36
+ # group has no +source+ set, it will inherit this value from the first
37
+ # obstacle in the group.
41
38
  #
42
39
  # @see https://gitlab.com/openflightmaps/ofmx/wikis/Obstacle
43
40
  class ObstacleGroup < Feature
@@ -113,6 +110,7 @@ module AIXM
113
110
  def to_uid
114
111
  builder = Builder::XmlMarkup.new(indent: 2)
115
112
  builder.OgrUid({ region: (region if AIXM.ofmx?) }.compact) do |ogr_uid|
113
+ ogr_uid.txtName(name)
116
114
  ogr_uid.geoLat(obstacles.first.xy.lat(AIXM.schema))
117
115
  ogr_uid.geoLong(obstacles.first.xy.long(AIXM.schema))
118
116
  end
@@ -126,7 +124,6 @@ module AIXM
126
124
  builder.comment! "Obstacle group: #{name}".strip
127
125
  builder.Ogr({ source: (source if AIXM.ofmx?) }.compact) do |ogr|
128
126
  ogr << to_uid.indent(2)
129
- ogr.txtName(name)
130
127
  ogr.codeDatum('WGE')
131
128
  if xy_accuracy
132
129
  ogr.valGeoAccuracy(xy_accuracy.dist.trim)
data/lib/aixm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module AIXM
2
- VERSION = "0.3.11".freeze
2
+ VERSION = "1.0.0".freeze
3
3
  end
data/lib/aixm/xy.rb CHANGED
@@ -4,6 +4,14 @@ module AIXM
4
4
 
5
5
  # Geographical coordinates
6
6
  #
7
+ # ===Warning!
8
+ # Coordinate tuples can be noted in mathematical order (XY = longitude first,
9
+ # latitude second) or in (more common) geographical order (YX = latitude
10
+ # first, longitude second). However you sort the attributes, make sure not
11
+ # to flip them by accident.
12
+ #
13
+ # See https://en.wikipedia.org/wiki/Geographic_coordinate_system
14
+ #
7
15
  # ===Recognized notations:
8
16
  # * DD - examples: 12.12345678 (north or east), -12.12345678 (south or west)
9
17
  # * DMS - examples: 11°22'33.44"N, 1112233.44W,
data/lib/aixm.rb CHANGED
@@ -36,9 +36,10 @@ require_relative 'aixm/component/service'
36
36
  require_relative 'aixm/component/frequency'
37
37
  require_relative 'aixm/component/geometry'
38
38
  require_relative 'aixm/component/geometry/point'
39
+ require_relative 'aixm/component/geometry/rhumb_line'
39
40
  require_relative 'aixm/component/geometry/arc'
40
- require_relative 'aixm/component/geometry/border'
41
41
  require_relative 'aixm/component/geometry/circle'
42
+ require_relative 'aixm/component/geometry/border'
42
43
  require_relative 'aixm/component/layer'
43
44
  require_relative 'aixm/component/vertical_limit'
44
45
  require_relative 'aixm/component/timetable'
File without changes
File without changes
@@ -1900,7 +1900,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1900
1900
  <xsd:simpleType name="codeIdDesigPtBase">
1901
1901
  <xsd:restriction base="alphanumeric">
1902
1902
  <xsd:minLength value="1"/>
1903
- <xsd:maxLength value="5"/>
1903
+ <xsd:maxLength value="10"/>
1904
1904
  </xsd:restriction>
1905
1905
  </xsd:simpleType>
1906
1906
  <xsd:complexType name="codeIdDesigPt">
@@ -3403,7 +3403,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3403
3403
  <xsd:enumeration value="VFR-RP"/>
3404
3404
  <xsd:enumeration value="VFR-MRP"/>
3405
3405
  <xsd:enumeration value="VFR-ENR"/>
3406
- <xsd:enumeration value="VFR-GLD"/>
3406
+ <xsd:enumeration value="VFR-GLDR"/>
3407
+ <xsd:enumeration value="VFR-HELI"/>
3408
+ <xsd:enumeration value="TOWN"/>
3409
+ <xsd:enumeration value="MOUNTAIN-TOP"/>
3410
+ <xsd:enumeration value="MOUNTAIN-PASS"/>
3407
3411
  <xsd:enumeration value="OTHER"/>
3408
3412
  </xsd:restriction>
3409
3413
  </xsd:simpleType>
@@ -4436,6 +4440,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4436
4440
  </xsd:extension>
4437
4441
  </xsd:simpleContent>
4438
4442
  </xsd:complexType>
4443
+ <xsd:simpleType name="codeCodingModeBase">
4444
+ <xsd:restriction base="xsd:string">
4445
+ <xsd:enumeration value="CONST"/>
4446
+ <xsd:enumeration value="PARA"/>
4447
+ </xsd:restriction>
4448
+ </xsd:simpleType>
4449
+ <xsd:complexType name="codeCodingMode">
4450
+ <xsd:annotation>
4451
+ <xsd:documentation>A code for coding mode: Constant or Parametrized.</xsd:documentation>
4452
+ </xsd:annotation>
4453
+ <xsd:simpleContent>
4454
+ <xsd:extension base="codeCodingModeBase">
4455
+ <xsd:attributeGroup ref="Changes"/>
4456
+ </xsd:extension>
4457
+ </xsd:simpleContent>
4458
+ </xsd:complexType>
4439
4459
  <xsd:simpleType name="dateMonthDayBase">
4440
4460
  <xsd:restriction base="xsd:string">
4441
4461
  <xsd:pattern value="(((0[1-9])|(1[0-9])|(2[0-9]))\-((0[1-9])|10|11|12))|(30\-(01|03|04|05|06|07|08|09|10|11|12))|(31\-(01|03|05|07|08|10|12))|SDLST|EDLST"/>
@@ -4496,6 +4516,36 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4496
4516
  </xsd:extension>
4497
4517
  </xsd:simpleContent>
4498
4518
  </xsd:complexType>
4519
+ <xsd:simpleType name="lineBase">
4520
+ <xsd:restriction base="xsd:string">
4521
+ <xsd:pattern value="-?((0\d|1[0-7])\d\.\d{8}|180\.0{8}),-?([0-8]\d\.\d{8}|90\.0{8})( -?((0\d|1[0-7])\d\.\d{8}|180\.0{8}),-?([0-8]\d\.\d{8}|90\.0{8}))+"/>
4522
+ </xsd:restriction>
4523
+ </xsd:simpleType>
4524
+ <xsd:complexType name="line">
4525
+ <xsd:annotation>
4526
+ <xsd:documentation>A line or polygon.</xsd:documentation>
4527
+ </xsd:annotation>
4528
+ <xsd:simpleContent>
4529
+ <xsd:extension base="lineBase">
4530
+ <xsd:attributeGroup ref="Changes"/>
4531
+ </xsd:extension>
4532
+ </xsd:simpleContent>
4533
+ </xsd:complexType>
4534
+ <xsd:simpleType name="bezierCurveBase">
4535
+ <xsd:restriction base="xsd:string">
4536
+ <xsd:pattern value="-?((0\d|1[0-7])\d\.\d{8}|180\.0{8}),-?([0-8]\d\.\d{8}|90\.0{8})(( -?((0\d|1[0-7])\d\.\d{8}|180\.0{8}),-?([0-8]\d\.\d{8}|90\.0{8})){3})+"/>
4537
+ </xsd:restriction>
4538
+ </xsd:simpleType>
4539
+ <xsd:complexType name="bezierCurve">
4540
+ <xsd:annotation>
4541
+ <xsd:documentation>An open or closed Bézier curve.</xsd:documentation>
4542
+ </xsd:annotation>
4543
+ <xsd:simpleContent>
4544
+ <xsd:extension base="bezierCurveBase">
4545
+ <xsd:attributeGroup ref="Changes"/>
4546
+ </xsd:extension>
4547
+ </xsd:simpleContent>
4548
+ </xsd:complexType>
4499
4549
  <xsd:simpleType name="noNumberBase">
4500
4550
  <xsd:restriction base="xsd:decimal">
4501
4551
  <xsd:pattern value="\d{1,4}"/>
@@ -1295,11 +1295,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1295
1295
  <xsd:documentation>Airspace is requiring for FPL-MSG the use of Unit contact address</xsd:documentation>
1296
1296
  </xsd:annotation>
1297
1297
  </xsd:element>
1298
- <xsd:element name="txtLocalType" type="txtName" minOccurs="0">
1299
- <xsd:annotation>
1300
- <xsd:documentation>Local type designator</xsd:documentation>
1301
- </xsd:annotation>
1302
- </xsd:element>
1303
1298
  <xsd:element name="txtName" type="txtName" minOccurs="0">
1304
1299
  <xsd:annotation>
1305
1300
  <xsd:documentation>Name</xsd:documentation>
@@ -1423,6 +1418,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1423
1418
  <xsd:documentation>Coded identifier</xsd:documentation>
1424
1419
  </xsd:annotation>
1425
1420
  </xsd:element>
1421
+ <xsd:element name="txtLocalType" type="txtName" minOccurs="0">
1422
+ <xsd:annotation>
1423
+ <xsd:documentation>Local type designator</xsd:documentation>
1424
+ </xsd:annotation>
1425
+ </xsd:element>
1426
1426
  </xsd:sequence>
1427
1427
  <xsd:attribute ref="mid"/>
1428
1428
  <xsd:attribute ref="region" use="required"/>
@@ -1877,6 +1877,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1877
1877
  <xsd:documentation>Name</xsd:documentation>
1878
1878
  </xsd:annotation>
1879
1879
  </xsd:element>
1880
+ <xsd:element name="valElev" type="valDistVer" minOccurs="0">
1881
+ <xsd:annotation>
1882
+ <xsd:documentation>Elevation</xsd:documentation>
1883
+ </xsd:annotation>
1884
+ </xsd:element>
1885
+ <xsd:element name="uomElev" type="uomElev" minOccurs="0">
1886
+ <xsd:annotation>
1887
+ <xsd:documentation>Unit of measurement [elevation]</xsd:documentation>
1888
+ </xsd:annotation>
1889
+ </xsd:element>
1890
+ <xsd:element name="valTrueBrg" type="valAngleBrg" minOccurs="0">
1891
+ <xsd:annotation>
1892
+ <xsd:documentation>True bearing</xsd:documentation>
1893
+ </xsd:annotation>
1894
+ </xsd:element>
1895
+ <xsd:element name="valMagBrg" type="valAngleBrg" minOccurs="0">
1896
+ <xsd:annotation>
1897
+ <xsd:documentation>Magnetic bearing</xsd:documentation>
1898
+ </xsd:annotation>
1899
+ </xsd:element>
1880
1900
  <xsd:element name="txtRmk" type="txtRmk" minOccurs="0">
1881
1901
  <xsd:annotation>
1882
1902
  <xsd:documentation>Remark</xsd:documentation>
@@ -2648,6 +2668,56 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2648
2668
  <xsd:documentation>Unit of measurement [minimum eye height over threshold]</xsd:documentation>
2649
2669
  </xsd:annotation>
2650
2670
  </xsd:element>
2671
+ <xsd:element name="codeRearTakeOffSectorAvbl" type="codeYesNo" minOccurs="0">
2672
+ <xsd:annotation>
2673
+ <xsd:documentation>Rear take-off sector available?</xsd:documentation>
2674
+ </xsd:annotation>
2675
+ </xsd:element>
2676
+ <xsd:element name="valRearTakeOffSectorTrueBrg" type="valAngleBrg" minOccurs="0">
2677
+ <xsd:annotation>
2678
+ <xsd:documentation>True bearing of rear take-off sector</xsd:documentation>
2679
+ </xsd:annotation>
2680
+ </xsd:element>
2681
+ <xsd:element name="valRearTakeOffSectorSlopeAngle" type="valAngle" minOccurs="0">
2682
+ <xsd:annotation>
2683
+ <xsd:documentation>Rear take-off sector slope angle</xsd:documentation>
2684
+ </xsd:annotation>
2685
+ </xsd:element>
2686
+ <xsd:element name="codeCodingMode" type="codeCodingMode" minOccurs="0">
2687
+ <xsd:annotation>
2688
+ <xsd:documentation>Coding mode</xsd:documentation>
2689
+ </xsd:annotation>
2690
+ </xsd:element>
2691
+ <xsd:element name="geoLatIap" type="geoLat" minOccurs="0">
2692
+ <xsd:annotation>
2693
+ <xsd:documentation>Initial approach point latitude</xsd:documentation>
2694
+ </xsd:annotation>
2695
+ </xsd:element>
2696
+ <xsd:element name="geoLongIap" type="geoLong" minOccurs="0">
2697
+ <xsd:annotation>
2698
+ <xsd:documentation>Initial approach point longitude</xsd:documentation>
2699
+ </xsd:annotation>
2700
+ </xsd:element>
2701
+ <xsd:element name="valAltIap" type="valDistVer" minOccurs="0">
2702
+ <xsd:annotation>
2703
+ <xsd:documentation>Initial approach point altitude</xsd:documentation>
2704
+ </xsd:annotation>
2705
+ </xsd:element>
2706
+ <xsd:element name="uomAltIap" type="uomDistVer" minOccurs="0">
2707
+ <xsd:annotation>
2708
+ <xsd:documentation>Unit of measurement [initial approach point altitude]</xsd:documentation>
2709
+ </xsd:annotation>
2710
+ </xsd:element>
2711
+ <xsd:element name="bezierSectorExtent" type="bezierCurve" minOccurs="0">
2712
+ <xsd:annotation>
2713
+ <xsd:documentation>Longitude</xsd:documentation>
2714
+ </xsd:annotation>
2715
+ </xsd:element>
2716
+ <xsd:element name="bezierSectorCentreLine" type="bezierCurve" minOccurs="0">
2717
+ <xsd:annotation>
2718
+ <xsd:documentation>Longitude</xsd:documentation>
2719
+ </xsd:annotation>
2720
+ </xsd:element>
2651
2721
  <xsd:element name="txtRmk" type="txtRmk" minOccurs="0">
2652
2722
  <xsd:annotation>
2653
2723
  <xsd:documentation>Remark</xsd:documentation>
@@ -3016,6 +3086,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3016
3086
  <xsd:documentation>Width</xsd:documentation>
3017
3087
  </xsd:annotation>
3018
3088
  </xsd:element>
3089
+ <xsd:element name="valMaxDim" type="valDistHorz" minOccurs="0">
3090
+ <xsd:annotation>
3091
+ <xsd:documentation>Largest overall dimension as defined in ICAO annex 14</xsd:documentation>
3092
+ </xsd:annotation>
3093
+ </xsd:element>
3019
3094
  <xsd:element name="uomDim" type="uomDistHorz" minOccurs="0">
3020
3095
  <xsd:annotation>
3021
3096
  <xsd:documentation>Unit of measurement [horizontal dimension]</xsd:documentation>
@@ -5450,11 +5525,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5450
5525
  <xsd:documentation>a version of Obstacle group</xsd:documentation>
5451
5526
  </xsd:annotation>
5452
5527
  </xsd:element>
5453
- <xsd:element name="txtName" type="txtName">
5454
- <xsd:annotation>
5455
- <xsd:documentation>Name</xsd:documentation>
5456
- </xsd:annotation>
5457
- </xsd:element>
5458
5528
  <xsd:element name="codeDatum" type="codeDatum">
5459
5529
  <xsd:annotation>
5460
5530
  <xsd:documentation>Datum</xsd:documentation>
@@ -5493,6 +5563,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5493
5563
  <xsd:documentation>Obstacle group - UID</xsd:documentation>
5494
5564
  </xsd:annotation>
5495
5565
  <xsd:sequence>
5566
+ <xsd:element name="txtName" type="txtName">
5567
+ <xsd:annotation>
5568
+ <xsd:documentation>Name</xsd:documentation>
5569
+ </xsd:annotation>
5570
+ </xsd:element>
5496
5571
  <xsd:element name="geoLat" type="geoLat">
5497
5572
  <xsd:annotation>
5498
5573
  <xsd:documentation>Group reference point latitude</xsd:documentation>
@@ -5517,11 +5592,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5517
5592
  <xsd:documentation>a version of Obstacle</xsd:documentation>
5518
5593
  </xsd:annotation>
5519
5594
  </xsd:element>
5520
- <xsd:element name="OgrUid" type="ObstacleGroupUidType" minOccurs="0">
5521
- <xsd:annotation>
5522
- <xsd:documentation>a version of Obstacle group</xsd:documentation>
5523
- </xsd:annotation>
5524
- </xsd:element>
5525
5595
  <xsd:element name="txtName" type="txtName" minOccurs="0">
5526
5596
  <xsd:annotation>
5527
5597
  <xsd:documentation>Name</xsd:documentation>
@@ -5537,6 +5607,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5537
5607
  <xsd:documentation>Type details</xsd:documentation>
5538
5608
  </xsd:annotation>
5539
5609
  </xsd:element>
5610
+ <xsd:element name="codeGroup" type="codeYesNo" minOccurs="0">
5611
+ <xsd:annotation>
5612
+ <xsd:documentation>Group of obstacles</xsd:documentation>
5613
+ </xsd:annotation>
5614
+ </xsd:element>
5540
5615
  <xsd:element name="codeLgt" type="codeYesNo" minOccurs="0">
5541
5616
  <xsd:annotation>
5542
5617
  <xsd:documentation>Lighted</xsd:documentation>
@@ -5562,31 +5637,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5562
5637
  <xsd:documentation>Datum</xsd:documentation>
5563
5638
  </xsd:annotation>
5564
5639
  </xsd:element>
5565
- <xsd:element name="valGeoAccuracy" type="valDistHorz" minOccurs="0">
5566
- <xsd:annotation>
5567
- <xsd:documentation>Geographical accuracy</xsd:documentation>
5568
- </xsd:annotation>
5569
- </xsd:element>
5570
- <xsd:element name="uomGeoAccuracy" type="uomDistHorz" minOccurs="0">
5571
- <xsd:annotation>
5572
- <xsd:documentation>Unit of measurement [geographical accuracy]</xsd:documentation>
5573
- </xsd:annotation>
5574
- </xsd:element>
5575
5640
  <xsd:element name="valElev" type="valDistVer">
5576
5641
  <xsd:annotation>
5577
5642
  <xsd:documentation>Elevation</xsd:documentation>
5578
5643
  </xsd:annotation>
5579
5644
  </xsd:element>
5580
- <xsd:element name="valElevAccuracy" type="valDistVer" minOccurs="0">
5581
- <xsd:annotation>
5582
- <xsd:documentation>Elevation accuracy</xsd:documentation>
5583
- </xsd:annotation>
5584
- </xsd:element>
5585
- <xsd:element name="uomElevAccuracy" type="uomElev" minOccurs="0">
5586
- <xsd:annotation>
5587
- <xsd:documentation>Unit of measurement [elevation accuracy]</xsd:documentation>
5588
- </xsd:annotation>
5589
- </xsd:element>
5590
5645
  <xsd:element name="valHgt" type="valDistVer" minOccurs="0">
5591
5646
  <xsd:annotation>
5592
5647
  <xsd:documentation>Height</xsd:documentation>
@@ -5660,6 +5715,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5660
5715
  <xsd:documentation>Obstacle - UID</xsd:documentation>
5661
5716
  </xsd:annotation>
5662
5717
  <xsd:sequence>
5718
+ <xsd:element name="OgrUid" type="ObstacleGroupUidType">
5719
+ <xsd:annotation>
5720
+ <xsd:documentation>a version of Obstacle group</xsd:documentation>
5721
+ </xsd:annotation>
5722
+ </xsd:element>
5663
5723
  <xsd:element name="geoLat" type="geoLat">
5664
5724
  <xsd:annotation>
5665
5725
  <xsd:documentation>Latitude</xsd:documentation>
@@ -5672,7 +5732,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5672
5732
  </xsd:element>
5673
5733
  </xsd:sequence>
5674
5734
  <xsd:attribute ref="mid"/>
5675
- <xsd:attribute ref="region" use="required"/>
5676
5735
  </xsd:complexType>
5677
5736
  <xsd:complexType name="OilType">
5678
5737
  <xsd:annotation>
@@ -8601,12 +8660,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8601
8660
  </xsd:element>
8602
8661
  <xsd:element name="dateValidWef" type="dateMonthDay">
8603
8662
  <xsd:annotation>
8604
- <xsd:documentation>Yearly start date</xsd:documentation>
8663
+ <xsd:documentation>(Yearly) start date</xsd:documentation>
8664
+ </xsd:annotation>
8665
+ </xsd:element>
8666
+ <xsd:element name="dateYearValidWef" type="dateYear" minOccurs="0">
8667
+ <xsd:annotation>
8668
+ <xsd:documentation>Year of start date</xsd:documentation>
8605
8669
  </xsd:annotation>
8606
8670
  </xsd:element>
8607
8671
  <xsd:element name="dateValidTil" type="dateMonthDay">
8608
8672
  <xsd:annotation>
8609
- <xsd:documentation>Yearly end date</xsd:documentation>
8673
+ <xsd:documentation>(Yearly) end date</xsd:documentation>
8674
+ </xsd:annotation>
8675
+ </xsd:element>
8676
+ <xsd:element name="dateYearValidTil" type="dateYear" minOccurs="0">
8677
+ <xsd:annotation>
8678
+ <xsd:documentation>Year of end date</xsd:documentation>
8610
8679
  </xsd:annotation>
8611
8680
  </xsd:element>
8612
8681
  <xsd:element name="codeDay" type="codeDay">
@@ -8693,12 +8762,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8693
8762
  </xsd:element>
8694
8763
  <xsd:element name="dateValidWef" type="dateMonthDay">
8695
8764
  <xsd:annotation>
8696
- <xsd:documentation>Yearly start date</xsd:documentation>
8765
+ <xsd:documentation>(Yearly) start date</xsd:documentation>
8766
+ </xsd:annotation>
8767
+ </xsd:element>
8768
+ <xsd:element name="dateYearValidWef" type="dateYear" minOccurs="0">
8769
+ <xsd:annotation>
8770
+ <xsd:documentation>Year of start date</xsd:documentation>
8697
8771
  </xsd:annotation>
8698
8772
  </xsd:element>
8699
8773
  <xsd:element name="dateValidTil" type="dateMonthDay">
8700
8774
  <xsd:annotation>
8701
- <xsd:documentation>Yearly end date</xsd:documentation>
8775
+ <xsd:documentation>(Yearly) end date</xsd:documentation>
8776
+ </xsd:annotation>
8777
+ </xsd:element>
8778
+ <xsd:element name="dateYearValidTil" type="dateYear" minOccurs="0">
8779
+ <xsd:annotation>
8780
+ <xsd:documentation>Year of end date</xsd:documentation>
8702
8781
  </xsd:annotation>
8703
8782
  </xsd:element>
8704
8783
  <xsd:element name="codeDay" type="codeDay">
File without changes
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: 0.3.11
4
+ version: 1.0.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: 2021-11-08 00:00:00.000000000 Z
33
+ date: 2021-11-28 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: builder
@@ -231,6 +231,7 @@ files:
231
231
  - lib/aixm/component/geometry/border.rb
232
232
  - lib/aixm/component/geometry/circle.rb
233
233
  - lib/aixm/component/geometry/point.rb
234
+ - lib/aixm/component/geometry/rhumb_line.rb
234
235
  - lib/aixm/component/helipad.rb
235
236
  - lib/aixm/component/layer.rb
236
237
  - lib/aixm/component/lighting.rb
@@ -274,11 +275,11 @@ files:
274
275
  - schemas/aixm/4.5/AIXM-DataTypes.xsd
275
276
  - schemas/aixm/4.5/AIXM-Features.xsd
276
277
  - schemas/aixm/4.5/AIXM-Snapshot.xsd
277
- - schemas/ofmx/0/OFMX-CSV-Obstacle.json
278
- - schemas/ofmx/0/OFMX-CSV.json
279
- - schemas/ofmx/0/OFMX-DataTypes.xsd
280
- - schemas/ofmx/0/OFMX-Features.xsd
281
- - schemas/ofmx/0/OFMX-Snapshot.xsd
278
+ - schemas/ofmx/0.1/OFMX-CSV-Obstacle.json
279
+ - schemas/ofmx/0.1/OFMX-CSV.json
280
+ - schemas/ofmx/0.1/OFMX-DataTypes.xsd
281
+ - schemas/ofmx/0.1/OFMX-Features.xsd
282
+ - schemas/ofmx/0.1/OFMX-Snapshot.xsd
282
283
  homepage: https://github.com/svoop/aixm
283
284
  licenses:
284
285
  - MIT
@@ -310,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
310
311
  - !ruby/object:Gem::Version
311
312
  version: '0'
312
313
  requirements: []
313
- rubygems_version: 3.2.30
314
+ rubygems_version: 3.2.32
314
315
  signing_key:
315
316
  specification_version: 4
316
317
  summary: Builder for AIXM/OFMX aeronautical information
metadata.gz.sig CHANGED
Binary file