aixm 0.1.0 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -1
- data/Guardfile +1 -1
- data/README.md +146 -17
- data/aixm.gemspec +3 -1
- data/lib/aixm.rb +12 -10
- data/lib/aixm/component/base.rb +6 -0
- data/lib/aixm/component/class_layer.rb +49 -0
- data/lib/aixm/component/geometry.rb +73 -0
- data/lib/aixm/component/geometry/arc.rb +53 -0
- data/lib/aixm/component/geometry/border.rb +49 -0
- data/lib/aixm/component/geometry/circle.rb +56 -0
- data/lib/aixm/component/geometry/point.rb +42 -0
- data/lib/aixm/component/schedule.rb +45 -0
- data/lib/aixm/{vertical/limits.rb → component/vertical_limits.rb} +9 -14
- data/lib/aixm/document.rb +30 -19
- data/lib/aixm/feature/airspace.rb +60 -29
- data/lib/aixm/refinements.rb +49 -2
- data/lib/aixm/shortcuts.rb +30 -0
- data/lib/aixm/version.rb +1 -1
- data/spec/factory.rb +42 -25
- data/spec/lib/aixm/component/class_layer_spec.rb +74 -0
- data/spec/lib/aixm/{horizontal → component/geometry}/arc_spec.rb +11 -11
- data/spec/lib/aixm/component/geometry/border_spec.rb +30 -0
- data/spec/lib/aixm/{horizontal → component/geometry}/circle_spec.rb +8 -8
- data/spec/lib/aixm/{horizontal → component/geometry}/point_spec.rb +7 -7
- data/spec/lib/aixm/{geometry_spec.rb → component/geometry_spec.rb} +39 -40
- data/spec/lib/aixm/component/schedule_spec.rb +33 -0
- data/spec/lib/aixm/{vertical/limits_spec.rb → component/vertical_limits_spec.rb} +10 -10
- data/spec/lib/aixm/document_spec.rb +97 -36
- data/spec/lib/aixm/feature/airspace_spec.rb +230 -71
- data/spec/lib/aixm/refinements_spec.rb +52 -12
- metadata +30 -23
- data/lib/aixm/constants.rb +0 -6
- data/lib/aixm/geometry.rb +0 -71
- data/lib/aixm/horizontal/arc.rb +0 -50
- data/lib/aixm/horizontal/border.rb +0 -45
- data/lib/aixm/horizontal/circle.rb +0 -53
- data/lib/aixm/horizontal/point.rb +0 -39
- data/spec/lib/aixm/horizontal/border_spec.rb +0 -47
data/lib/aixm/refinements.rb
CHANGED
@@ -1,11 +1,38 @@
|
|
1
1
|
module AIXM
|
2
2
|
module Refinements
|
3
3
|
|
4
|
+
UPTRANS_FILTER = %r{[^A-Z0-9, !"&#$%'\(\)\*\+\-\./:;<=>\?@\[\\\]\^_\|\{\}]}.freeze
|
5
|
+
|
6
|
+
UPTRANS_MAP = {
|
7
|
+
'Ä' => 'AE',
|
8
|
+
'Ö' => 'OE',
|
9
|
+
'Ü' => 'UE',
|
10
|
+
'Æ' => 'AE',
|
11
|
+
'Œ' => 'OE',
|
12
|
+
"Å" => "Aa",
|
13
|
+
"Ø" => "Oe"
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
KM_FACTORS = {
|
17
|
+
km: 1,
|
18
|
+
m: 0.001,
|
19
|
+
nm: 1.852,
|
20
|
+
ft: 0.0003048
|
21
|
+
}.freeze
|
22
|
+
|
4
23
|
refine Array do
|
5
24
|
##
|
6
|
-
#
|
25
|
+
# Shortcut for +include?+
|
26
|
+
#
|
27
|
+
# Example:
|
28
|
+
# extensions.include?(:OFM) # => true
|
29
|
+
# extensions >> :OFM # => true
|
30
|
+
alias_method :>>, :include?
|
31
|
+
|
32
|
+
##
|
33
|
+
# Build a 1 to 9 digit integer digest (which fits in signed 32bit) from payload
|
7
34
|
def to_digest
|
8
|
-
::Digest::
|
35
|
+
::Digest::SHA512.hexdigest(flatten.join('|')).gsub(/\D/, '')[0, 9].to_i
|
9
36
|
end
|
10
37
|
end
|
11
38
|
|
@@ -17,6 +44,18 @@ module AIXM
|
|
17
44
|
gsub(/^/, whitespace)
|
18
45
|
end
|
19
46
|
|
47
|
+
##
|
48
|
+
# Upcase and transliterate to match the reduced character set for
|
49
|
+
# AIXM names and titles
|
50
|
+
def uptrans
|
51
|
+
self.dup.tap do |string|
|
52
|
+
string.upcase!
|
53
|
+
string.gsub!(/(#{UPTRANS_MAP.keys.join('|')})/, UPTRANS_MAP)
|
54
|
+
string.unicode_normalize!(:nfd)
|
55
|
+
string.gsub!(UPTRANS_FILTER, '')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
20
59
|
##
|
21
60
|
# Convert DMS angle to DD or +nil+ if the format is not recognized
|
22
61
|
#
|
@@ -56,6 +95,14 @@ module AIXM
|
|
56
95
|
seconds.abs
|
57
96
|
]
|
58
97
|
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Convert a distance +from+ unit (+:km+, +:m+, +:nm+ or +:ft+) to kilometers
|
101
|
+
def to_km(from:)
|
102
|
+
self * KM_FACTORS.fetch(from.downcase.to_sym)
|
103
|
+
rescue KeyError
|
104
|
+
raise(ArgumentError, "unit `#{from}' not supported")
|
105
|
+
end
|
59
106
|
end
|
60
107
|
end
|
61
108
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AIXM
|
2
|
+
|
3
|
+
SCHEMA = Pathname(__dir__).join('schemas', '4.5', 'AIXM-Snapshot.xsd').freeze
|
4
|
+
|
5
|
+
GROUND = Z.new(alt: 0, code: :QFE).freeze
|
6
|
+
UNLIMITED = Z.new(alt: 999, code: :QNE).freeze
|
7
|
+
H24 = Component::Schedule.new(code: :H24).freeze
|
8
|
+
|
9
|
+
ELEMENTS = {
|
10
|
+
document: Document,
|
11
|
+
xy: XY,
|
12
|
+
z: Z,
|
13
|
+
airspace: Feature::Airspace,
|
14
|
+
class_layer: Component::ClassLayer,
|
15
|
+
geometry: Component::Geometry,
|
16
|
+
schedule: Component::Schedule,
|
17
|
+
vertical_limits: Component::VerticalLimits,
|
18
|
+
arc: Component::Geometry::Arc,
|
19
|
+
border: Component::Geometry::Border,
|
20
|
+
circle: Component::Geometry::Circle,
|
21
|
+
point: Component::Geometry::Point
|
22
|
+
}.freeze
|
23
|
+
|
24
|
+
ELEMENTS.each do |element, klass|
|
25
|
+
define_singleton_method(element) do |*arguments|
|
26
|
+
klass.new(*arguments)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/lib/aixm/version.rb
CHANGED
data/spec/factory.rb
CHANGED
@@ -3,51 +3,68 @@ module AIXM
|
|
3
3
|
class << self
|
4
4
|
|
5
5
|
def vertical_limits
|
6
|
-
AIXM
|
7
|
-
upper_z: AIXM
|
8
|
-
lower_z: AIXM
|
9
|
-
max_z: AIXM
|
10
|
-
min_z: AIXM
|
6
|
+
AIXM.vertical_limits(
|
7
|
+
upper_z: AIXM.z(alt: 65, code: :QNE),
|
8
|
+
lower_z: AIXM.z(alt: 45, code: :QNE),
|
9
|
+
max_z: AIXM.z(alt: 6000, code: :QNH),
|
10
|
+
min_z: AIXM.z(alt: 3000, code: :QFE)
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def class_layer
|
15
|
+
AIXM.class_layer(
|
16
|
+
class: :C,
|
17
|
+
vertical_limits: vertical_limits
|
11
18
|
)
|
12
19
|
end
|
13
20
|
|
14
21
|
def polygon_geometry
|
15
|
-
AIXM
|
16
|
-
geometry << AIXM
|
17
|
-
xy: AIXM
|
18
|
-
center_xy: AIXM
|
22
|
+
AIXM.geometry.tap do |geometry|
|
23
|
+
geometry << AIXM.arc(
|
24
|
+
xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E)),
|
25
|
+
center_xy: AIXM.xy(lat: %q(47°54'15"N), long: %q(007°33'48"E)),
|
19
26
|
clockwise: true
|
20
27
|
)
|
21
|
-
geometry << AIXM
|
22
|
-
xy: AIXM
|
28
|
+
geometry << AIXM.border(
|
29
|
+
xy: AIXM.xy(lat: %q(47°56'37"N), long: %q(007°35'45"E)),
|
23
30
|
name: 'FRANCE_GERMANY'
|
24
31
|
)
|
25
|
-
geometry << AIXM
|
26
|
-
xy: AIXM
|
32
|
+
geometry << AIXM.point(
|
33
|
+
xy: AIXM.xy(lat: %q(47°51'33"N), long: %q(007°33'36"E))
|
27
34
|
)
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
31
38
|
def circle_geometry
|
32
|
-
AIXM
|
33
|
-
geometry << AIXM
|
34
|
-
center_xy: AIXM
|
39
|
+
AIXM.geometry.tap do |geometry|
|
40
|
+
geometry << AIXM.circle(
|
41
|
+
center_xy: AIXM.xy(lat: %q(47°35'00"N), long: %q(004°53'00"E)),
|
35
42
|
radius: 10
|
36
43
|
)
|
37
44
|
end
|
38
45
|
end
|
39
46
|
|
40
|
-
def polygon_airspace
|
41
|
-
AIXM
|
42
|
-
|
47
|
+
def polygon_airspace(short_name: 'POLYGON', schedule: :H24)
|
48
|
+
AIXM.airspace(
|
49
|
+
name: 'POLYGON AIRSPACE',
|
50
|
+
short_name: short_name,
|
51
|
+
type: 'D'
|
52
|
+
).tap do |airspace|
|
53
|
+
airspace.schedule = AIXM.schedule(code: schedule) if schedule
|
54
|
+
airspace.class_layers << class_layer
|
43
55
|
airspace.geometry = polygon_geometry
|
44
56
|
airspace.remarks = 'polygon airspace'
|
45
57
|
end
|
46
58
|
end
|
47
59
|
|
48
|
-
def circle_airspace
|
49
|
-
AIXM
|
50
|
-
|
60
|
+
def circle_airspace(short_name: 'CIRCLE', schedule: :H24)
|
61
|
+
AIXM.airspace(
|
62
|
+
name: 'CIRCLE AIRSPACE',
|
63
|
+
short_name: short_name,
|
64
|
+
type: 'D'
|
65
|
+
).tap do |airspace|
|
66
|
+
airspace.schedule = AIXM.schedule(code: schedule) if schedule
|
67
|
+
airspace.class_layers << class_layer
|
51
68
|
airspace.geometry = circle_geometry
|
52
69
|
airspace.remarks = 'circle airspace'
|
53
70
|
end
|
@@ -55,9 +72,9 @@ module AIXM
|
|
55
72
|
|
56
73
|
def document
|
57
74
|
time = Time.parse('2018-01-18 12:00:00 +0100')
|
58
|
-
AIXM
|
59
|
-
document << AIXM::Factory.polygon_airspace
|
60
|
-
document << AIXM::Factory.circle_airspace
|
75
|
+
AIXM.document(created_at: time, effective_at: time).tap do |document|
|
76
|
+
document.features << AIXM::Factory.polygon_airspace
|
77
|
+
document.features << AIXM::Factory.circle_airspace
|
61
78
|
end
|
62
79
|
end
|
63
80
|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Component::ClassLayer do
|
4
|
+
describe :initialize do
|
5
|
+
it "won't accept invalid arguments" do
|
6
|
+
-> { AIXM::Component::ClassLayer.new(class: 'X', vertical_limits: AIXM::Factory.vertical_limits ) }.must_raise ArgumentError
|
7
|
+
-> { AIXM::Component::ClassLayer.new(class: 'A', vertical_limits: 'foobar') }.must_raise ArgumentError
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "with class" do
|
12
|
+
subject do
|
13
|
+
AIXM::Component::ClassLayer.new(class: :C, vertical_limits: AIXM::Factory.vertical_limits)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe :to_digest do
|
17
|
+
it "must return digest of payload" do
|
18
|
+
subject.to_digest.must_equal 612555203
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe :to_xml do
|
23
|
+
it "must build correct XML" do
|
24
|
+
subject.to_xml.must_equal <<~END
|
25
|
+
<codeClass>C</codeClass>
|
26
|
+
<codeDistVerUpper>STD</codeDistVerUpper>
|
27
|
+
<valDistVerUpper>65</valDistVerUpper>
|
28
|
+
<uomDistVerUpper>FL</uomDistVerUpper>
|
29
|
+
<codeDistVerLower>STD</codeDistVerLower>
|
30
|
+
<valDistVerLower>45</valDistVerLower>
|
31
|
+
<uomDistVerLower>FL</uomDistVerLower>
|
32
|
+
<codeDistVerMax>ALT</codeDistVerMax>
|
33
|
+
<valDistVerMax>6000</valDistVerMax>
|
34
|
+
<uomDistVerMax>FT</uomDistVerMax>
|
35
|
+
<codeDistVerMnm>HEI</codeDistVerMnm>
|
36
|
+
<valDistVerMnm>3000</valDistVerMnm>
|
37
|
+
<uomDistVerMnm>FT</uomDistVerMnm>
|
38
|
+
END
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "without class" do
|
44
|
+
subject do
|
45
|
+
AIXM::Component::ClassLayer.new(vertical_limits: AIXM::Factory.vertical_limits)
|
46
|
+
end
|
47
|
+
|
48
|
+
describe :to_digest do
|
49
|
+
it "must return digest of payload" do
|
50
|
+
subject.to_digest.must_equal 486148039
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe :to_xml do
|
55
|
+
it "must build correct XML" do
|
56
|
+
subject.to_xml.must_equal <<~END
|
57
|
+
<codeDistVerUpper>STD</codeDistVerUpper>
|
58
|
+
<valDistVerUpper>65</valDistVerUpper>
|
59
|
+
<uomDistVerUpper>FL</uomDistVerUpper>
|
60
|
+
<codeDistVerLower>STD</codeDistVerLower>
|
61
|
+
<valDistVerLower>45</valDistVerLower>
|
62
|
+
<uomDistVerLower>FL</uomDistVerLower>
|
63
|
+
<codeDistVerMax>ALT</codeDistVerMax>
|
64
|
+
<valDistVerMax>6000</valDistVerMax>
|
65
|
+
<uomDistVerMax>FT</uomDistVerMax>
|
66
|
+
<codeDistVerMnm>HEI</codeDistVerMnm>
|
67
|
+
<valDistVerMnm>3000</valDistVerMnm>
|
68
|
+
<uomDistVerMnm>FT</uomDistVerMnm>
|
69
|
+
END
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../../../../spec_helper'
|
2
2
|
|
3
|
-
describe AIXM::
|
3
|
+
describe AIXM::Component::Geometry::Arc do
|
4
4
|
describe :initialize do
|
5
5
|
it "won't accept invalid arguments" do
|
6
6
|
xy = AIXM::XY.new(lat: 11.1, long: 22.2)
|
7
|
-
-> { AIXM::
|
8
|
-
-> { AIXM::
|
9
|
-
-> { AIXM::
|
7
|
+
-> { AIXM::Component::Geometry::Arc.new(xy: 0, center_xy: xy, clockwise: true) }.must_raise ArgumentError
|
8
|
+
-> { AIXM::Component::Geometry::Arc.new(xy: xy, center_xy: 0, clockwise: true) }.must_raise ArgumentError
|
9
|
+
-> { AIXM::Component::Geometry::Arc.new(xy: xy, center_xy: xy, clockwise: 0) }.must_raise ArgumentError
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
describe :clockwise? do
|
14
14
|
it "must return true or false" do
|
15
15
|
xy = AIXM::XY.new(lat: 11.1, long: 22.2)
|
16
|
-
AIXM::
|
17
|
-
AIXM::
|
16
|
+
AIXM::Component::Geometry::Arc.new(xy: xy, center_xy: xy, clockwise: true).must_be :clockwise?
|
17
|
+
AIXM::Component::Geometry::Arc.new(xy: xy, center_xy: xy, clockwise: false).wont_be :clockwise?
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe :to_digest do
|
22
22
|
it "must return digest of payload" do
|
23
|
-
subject = AIXM::
|
23
|
+
subject = AIXM::Component::Geometry::Arc.new(
|
24
24
|
xy: AIXM::XY.new(lat: 11.1, long: 33.3),
|
25
25
|
center_xy: AIXM::XY.new(lat: 22.2, long: 33.3),
|
26
26
|
clockwise: true
|
27
27
|
)
|
28
|
-
subject.to_digest.must_equal
|
28
|
+
subject.to_digest.must_equal 712900173
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
describe :to_xml do
|
33
33
|
it "must build correct XML for clockwise arcs" do
|
34
|
-
subject = AIXM::
|
34
|
+
subject = AIXM::Component::Geometry::Arc.new(
|
35
35
|
xy: AIXM::XY.new(lat: 11.1, long: 33.3),
|
36
36
|
center_xy: AIXM::XY.new(lat: 22.2, long: 33.3),
|
37
37
|
clockwise: true
|
@@ -49,7 +49,7 @@ describe AIXM::Horizontal::Arc do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it "must build correct XML for counter-clockwise arcs" do
|
52
|
-
subject = AIXM::
|
52
|
+
subject = AIXM::Component::Geometry::Arc.new(
|
53
53
|
xy: AIXM::XY.new(lat: 11.1, long: 33.3),
|
54
54
|
center_xy: AIXM::XY.new(lat: 22.2, long: 33.3),
|
55
55
|
clockwise: false
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
describe AIXM::Component::Geometry::Border do
|
4
|
+
describe :to_digest do
|
5
|
+
it "must return digest of payload" do
|
6
|
+
subject = AIXM::Component::Geometry::Border.new(
|
7
|
+
xy: AIXM::XY.new(lat: 11.1, long: 22.2),
|
8
|
+
name: 'foobar'
|
9
|
+
)
|
10
|
+
subject.to_digest.must_equal 813052011
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe :to_xml do
|
15
|
+
it "must build correct XML" do
|
16
|
+
subject = AIXM::Component::Geometry::Border.new(
|
17
|
+
xy: AIXM::XY.new(lat: 11.1, long: 22.2),
|
18
|
+
name: 'foobar'
|
19
|
+
)
|
20
|
+
subject.to_xml.must_equal <<~END
|
21
|
+
<Avx>
|
22
|
+
<codeType>FNT</codeType>
|
23
|
+
<geoLat>110600.00N</geoLat>
|
24
|
+
<geoLong>0221200.00E</geoLong>
|
25
|
+
<codeDatum>WGE</codeDatum>
|
26
|
+
</Avx>
|
27
|
+
END
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../../../../spec_helper'
|
2
2
|
|
3
|
-
describe AIXM::
|
3
|
+
describe AIXM::Component::Geometry::Circle do
|
4
4
|
describe :initialize do
|
5
5
|
it "won't accept invalid arguments" do
|
6
|
-
-> { AIXM::
|
6
|
+
-> { AIXM::Component::Geometry::Circle.new(center_xy: 0, radius: 0) }.must_raise ArgumentError
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
10
|
describe :north_xy do
|
11
11
|
it "must calculate approximation of northmost point on the circumference" do
|
12
|
-
subject = AIXM::
|
12
|
+
subject = AIXM::Component::Geometry::Circle.new(
|
13
13
|
center_xy: AIXM::XY.new(lat: 12.12345678, long: -23.12345678),
|
14
14
|
radius: 15
|
15
15
|
)
|
@@ -19,17 +19,17 @@ describe AIXM::Horizontal::Circle do
|
|
19
19
|
|
20
20
|
describe :to_digest do
|
21
21
|
it "must return digest of payload" do
|
22
|
-
subject = AIXM::
|
22
|
+
subject = AIXM::Component::Geometry::Circle.new(
|
23
23
|
center_xy: AIXM::XY.new(lat: 12.12345678, long: -23.12345678),
|
24
24
|
radius: 15
|
25
25
|
)
|
26
|
-
subject.to_digest.must_equal
|
26
|
+
subject.to_digest.must_equal 386055945
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
describe :to_xml do
|
31
31
|
it "must build correct XML for circles not near the equator" do
|
32
|
-
subject = AIXM::
|
32
|
+
subject = AIXM::Component::Geometry::Circle.new(
|
33
33
|
center_xy: AIXM::XY.new(lat: 11.1, long: 22.2),
|
34
34
|
radius: 25
|
35
35
|
)
|
@@ -46,7 +46,7 @@ describe AIXM::Horizontal::Circle do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "must build correct XML for circles near the equator" do
|
49
|
-
subject = AIXM::
|
49
|
+
subject = AIXM::Component::Geometry::Circle.new(
|
50
50
|
center_xy: AIXM::XY.new(lat: -0.0005, long: -22.2),
|
51
51
|
radius: 50
|
52
52
|
)
|
@@ -1,22 +1,22 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../../../../spec_helper'
|
2
2
|
|
3
|
-
describe AIXM::
|
3
|
+
describe AIXM::Component::Geometry::Point do
|
4
4
|
describe :initialize do
|
5
5
|
it "won't accept invalid arguments" do
|
6
|
-
-> { AIXM::
|
6
|
+
-> { AIXM::Component::Geometry::Point.new(xy: 0) }.must_raise ArgumentError
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
10
|
describe :to_digest do
|
11
11
|
it "must return digest of payload" do
|
12
|
-
subject = AIXM::
|
13
|
-
subject.to_digest.must_equal
|
12
|
+
subject = AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11.1, long: 22.2))
|
13
|
+
subject.to_digest.must_equal 167706171
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
describe :to_xml do
|
18
18
|
it "must build correct XML for N/E points" do
|
19
|
-
subject = AIXM::
|
19
|
+
subject = AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: 11.1, long: 22.2))
|
20
20
|
subject.to_xml.must_equal <<~END
|
21
21
|
<Avx>
|
22
22
|
<codeType>GRC</codeType>
|
@@ -28,7 +28,7 @@ describe AIXM::Horizontal::Point do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "must build correct XML for S/W points" do
|
31
|
-
subject = AIXM::
|
31
|
+
subject = AIXM::Component::Geometry::Point.new(xy: AIXM::XY.new(lat: -11.1, long: -22.2))
|
32
32
|
subject.to_xml.must_equal <<~END
|
33
33
|
<Avx>
|
34
34
|
<codeType>GRC</codeType>
|