aipp 0.2.4 → 1.0.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 +2 -0
- data/CHANGELOG.md +38 -0
- data/README.md +222 -88
- data/exe/aip2aixm +2 -2
- data/exe/aip2ofmx +2 -2
- data/lib/aipp/aip.rb +113 -31
- data/lib/aipp/border.rb +77 -46
- data/lib/aipp/debugger.rb +101 -0
- data/lib/aipp/downloader.rb +39 -26
- data/lib/aipp/executable.rb +41 -22
- data/lib/aipp/parser.rb +94 -21
- data/lib/aipp/patcher.rb +5 -2
- data/lib/aipp/pdf.rb +1 -1
- data/lib/aipp/regions/LF/README.md +49 -0
- data/lib/aipp/regions/LF/aerodromes.rb +223 -0
- data/lib/aipp/regions/LF/d_p_r_airspaces.rb +56 -0
- data/lib/aipp/regions/LF/dangerous_activities.rb +49 -0
- data/lib/aipp/regions/LF/designated_points.rb +47 -0
- data/lib/aipp/regions/LF/fixtures/aerodromes.yml +608 -0
- data/lib/aipp/regions/LF/helipads.rb +122 -0
- data/lib/aipp/regions/LF/helpers/base.rb +218 -0
- data/lib/aipp/regions/LF/helpers/surface.rb +49 -0
- data/lib/aipp/regions/LF/helpers/usage_limitation.rb +20 -0
- data/lib/aipp/regions/LF/navigational_aids.rb +85 -0
- data/lib/aipp/regions/LF/obstacles.rb +153 -0
- data/lib/aipp/regions/LF/serviced_airspaces.rb +70 -0
- data/lib/aipp/regions/LF/services.rb +172 -0
- data/lib/aipp/t_hash.rb +4 -5
- data/lib/aipp/version.rb +1 -1
- data/lib/aipp.rb +11 -5
- data/lib/core_ext/enumerable.rb +9 -9
- data/lib/core_ext/hash.rb +21 -5
- data/lib/core_ext/nokogiri.rb +54 -0
- data/lib/core_ext/string.rb +38 -66
- data.tar.gz.sig +2 -0
- metadata +180 -188
- metadata.gz.sig +0 -0
- data/.gitignore +0 -8
- data/.ruby-version +0 -1
- data/.travis.yml +0 -8
- data/.yardopts +0 -3
- data/Guardfile +0 -7
- data/TODO.md +0 -6
- data/aipp.gemspec +0 -44
- data/gems.rb +0 -3
- data/lib/aipp/airac.rb +0 -55
- data/lib/aipp/regions/LF/AD-1.3.rb +0 -162
- data/lib/aipp/regions/LF/AD-1.6.rb +0 -31
- data/lib/aipp/regions/LF/AD-2.rb +0 -313
- data/lib/aipp/regions/LF/AD-3.1.rb +0 -185
- data/lib/aipp/regions/LF/ENR-2.1.rb +0 -92
- data/lib/aipp/regions/LF/ENR-4.1.rb +0 -97
- data/lib/aipp/regions/LF/ENR-4.3.rb +0 -28
- data/lib/aipp/regions/LF/ENR-5.1.rb +0 -75
- data/lib/aipp/regions/LF/ENR-5.5.rb +0 -53
- data/lib/aipp/regions/LF/fixtures/AD-1.3.yml +0 -511
- data/lib/aipp/regions/LF/fixtures/AD-2.yml +0 -185
- data/lib/aipp/regions/LF/fixtures/AD-3.1.yml +0 -10
- data/lib/aipp/regions/LF/helpers/AD_radio.rb +0 -90
- data/lib/aipp/regions/LF/helpers/URL.rb +0 -26
- data/lib/aipp/regions/LF/helpers/common.rb +0 -217
- data/lib/core_ext/object.rb +0 -43
- data/rakefile.rb +0 -12
- data/spec/fixtures/archive.zip +0 -0
- data/spec/fixtures/border.geojson +0 -201
- data/spec/fixtures/document.pdf +0 -0
- data/spec/fixtures/document.pdf.json +0 -1
- data/spec/fixtures/new.html +0 -6
- data/spec/fixtures/new.pdf +0 -0
- data/spec/fixtures/new.txt +0 -1
- data/spec/lib/aipp/airac_spec.rb +0 -98
- data/spec/lib/aipp/border_spec.rb +0 -135
- data/spec/lib/aipp/downloader_spec.rb +0 -81
- data/spec/lib/aipp/patcher_spec.rb +0 -46
- data/spec/lib/aipp/pdf_spec.rb +0 -124
- data/spec/lib/aipp/t_hash_spec.rb +0 -44
- data/spec/lib/aipp/version_spec.rb +0 -7
- data/spec/lib/core_ext/enumberable_spec.rb +0 -76
- data/spec/lib/core_ext/hash_spec.rb +0 -27
- data/spec/lib/core_ext/integer_spec.rb +0 -15
- data/spec/lib/core_ext/nil_class_spec.rb +0 -11
- data/spec/lib/core_ext/string_spec.rb +0 -112
- data/spec/sounds/failure.mp3 +0 -0
- data/spec/sounds/success.mp3 +0 -0
- data/spec/spec_helper.rb +0 -28
@@ -0,0 +1,56 @@
|
|
1
|
+
module AIPP
|
2
|
+
module LF
|
3
|
+
|
4
|
+
class DPRAirspaces < AIP
|
5
|
+
|
6
|
+
include AIPP::LF::Helpers::Base
|
7
|
+
|
8
|
+
# Map source types to type and optional local type
|
9
|
+
SOURCE_TYPES = {
|
10
|
+
'D' => { type: 'D' },
|
11
|
+
'P' => { type: 'P' },
|
12
|
+
'R' => { type: 'R' },
|
13
|
+
'ZIT' => { type: 'P', local_type: 'ZIT' }
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
# Radius to use for zones consisting of one point only
|
17
|
+
POINT_RADIUS = AIXM.d(1, :km).freeze
|
18
|
+
|
19
|
+
def parse
|
20
|
+
SOURCE_TYPES.each do |source_type, target|
|
21
|
+
verbose_info("processing #{source_type}")
|
22
|
+
cache.espace.css(%Q(Espace[lk^="[LF][#{source_type} "])).each do |espace_node|
|
23
|
+
# UPSTREAM: Espace[pk=300343] has no Partie/Volume (reported)
|
24
|
+
next if espace_node['pk'] == '300343'
|
25
|
+
partie_node = cache.partie.at_css(%Q(Partie:has(Espace[pk="#{espace_node['pk']}"])))
|
26
|
+
volume_node = cache.volume.at_css(%Q(Volume:has(Partie[pk="#{partie_node['pk']}"])))
|
27
|
+
name = "#{options[:region]}-#{source_type}#{espace_node.(:Nom)}".remove(/\s/)
|
28
|
+
add(
|
29
|
+
AIXM.airspace(
|
30
|
+
source: source(section: 'ENR', position: espace_node.line),
|
31
|
+
name: "#{name} #{partie_node.(:NomUsuel)}".strip,
|
32
|
+
type: target[:type],
|
33
|
+
local_type: target[:local_type]
|
34
|
+
).tap do |airspace|
|
35
|
+
airspace.geometry = geometry_from(partie_node.(:Contour))
|
36
|
+
if airspace.geometry.point? # convert point to circle
|
37
|
+
airspace.geometry = AIXM.geometry(
|
38
|
+
AIXM.circle(
|
39
|
+
center_xy: airspace.geometry.segments.first.xy,
|
40
|
+
radius: POINT_RADIUS
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
fail("geometry is not closed") unless airspace.geometry.closed?
|
45
|
+
airspace.add_layer layer_from(volume_node)
|
46
|
+
airspace.layers.first.timetable = timetable_from(volume_node.(:HorCode))
|
47
|
+
airspace.layers.first.remarks = volume_node.(:Activite)
|
48
|
+
end
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module AIPP
|
2
|
+
module LF
|
3
|
+
|
4
|
+
class DangerousActivities < AIP
|
5
|
+
|
6
|
+
include AIPP::LF::Helpers::Base
|
7
|
+
|
8
|
+
# Map raw activities to type of activity airspace
|
9
|
+
ACTIVITIES = {
|
10
|
+
'AP' => { activity: :other, airspace: :dangerous_activities_area },
|
11
|
+
'Aer' => { activity: :aeromodelling, airspace: :dangerous_activities_area },
|
12
|
+
'Bal' => { activity: :balloon, airspace: :dangerous_activities_area },
|
13
|
+
'Pje' => { activity: :parachuting, airspace: :dangerous_activities_area },
|
14
|
+
'TrPVL' => { activity: :glider_winch, airspace: :dangerous_activities_area },
|
15
|
+
'TrPla' => { activity: :glider_winch, airspace: :dangerous_activities_area },
|
16
|
+
'TrVL' => { activity: :glider_winch, airspace: :dangerous_activities_area },
|
17
|
+
'Vol' => { activity: :acrobatics, airspace: :dangerous_activities_area }
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
def parse
|
21
|
+
ACTIVITIES.each do |code, type|
|
22
|
+
verbose_info("processing #{code}")
|
23
|
+
cache.espace.css(%Q(Espace[lk^="[LF][#{code} "])).each do |espace_node|
|
24
|
+
partie_node = cache.partie.at_css(%Q(Partie:has(Espace[pk="#{espace_node['pk']}"])))
|
25
|
+
volume_node = cache.volume.at_css(%Q(Volume:has(Partie[pk="#{partie_node['pk']}"])))
|
26
|
+
add(
|
27
|
+
AIXM.airspace(
|
28
|
+
source: source(section: 'ENR', position: espace_node.line),
|
29
|
+
id: espace_node.(:Nom),
|
30
|
+
type: type[:airspace],
|
31
|
+
local_type: code.upcase,
|
32
|
+
name: [espace_node.(:Nom), partie_node.(:NomUsuel)].join(' ')
|
33
|
+
).tap do |airspace|
|
34
|
+
airspace.geometry = geometry_from partie_node.(:Contour)
|
35
|
+
layer_from(volume_node).then do |layer|
|
36
|
+
layer.activity = type[:activity]
|
37
|
+
airspace.add_layer layer
|
38
|
+
end
|
39
|
+
airspace.layers.first.timetable = timetable_from(volume_node.(:HorCode))
|
40
|
+
airspace.layers.first.remarks = volume_node.(:Remarque)
|
41
|
+
end
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module AIPP
|
2
|
+
module LF
|
3
|
+
|
4
|
+
class DesignatedPoints < AIP
|
5
|
+
|
6
|
+
include AIPP::LF::Helpers::Base
|
7
|
+
|
8
|
+
DEPENDS = %w(aerodromes)
|
9
|
+
|
10
|
+
SOURCE_TYPES = {
|
11
|
+
'VFR' => :vfr_reporting_point,
|
12
|
+
'WPT' => :icao
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
def parse
|
16
|
+
SOURCE_TYPES.each do |source_type, type|
|
17
|
+
verbose_info("processing #{source_type}")
|
18
|
+
cache.navfix.css(%Q(NavFix[lk^="[LF][#{source_type} "])).each do |navfix_node|
|
19
|
+
ident = navfix_node.(:Ident)
|
20
|
+
add(
|
21
|
+
AIXM.designated_point(
|
22
|
+
source: source(section: 'ENR', position: navfix_node.line),
|
23
|
+
type: type,
|
24
|
+
id: ident.split('-').last.remove(/[^a-z\d]/i), # only use last segment of ID
|
25
|
+
name: ident,
|
26
|
+
xy: xy_from(navfix_node.(:Geometrie))
|
27
|
+
).tap do |designated_point|
|
28
|
+
designated_point.remarks = navfix_node.(:Description)
|
29
|
+
if ident.match? /-/
|
30
|
+
airport = find_by(:airport, id: "LF#{ident.split('-').first}").first
|
31
|
+
designated_point.airport = airport
|
32
|
+
end
|
33
|
+
end
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
AIXM::Memoize.method :to_uid do
|
38
|
+
aixm.features.find_by(:designated_point).duplicates.each do |duplicates|
|
39
|
+
duplicates.first.name += '/' + duplicates[1..].map(&:name).join('/')
|
40
|
+
aixm.remove_features(duplicates[1..])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|