Class: ATCTools::Airport
- Inherits:
-
Object
- Object
- ATCTools::Airport
- Defined in:
- lib/atc-tools/airport.rb
Instance Attribute Summary collapse
-
#code ⇒ Object
Airport’s ICAO code.
-
#heading_uri ⇒ Object
readonly
URI of the web page used for the last heading lookup.
-
#name ⇒ Object
Airport’s full name.
-
#name_uri ⇒ Object
readonly
URI of the web page used for the last airport name lookup.
-
#variance ⇒ Object
Airport’s magnetic variance from true north.
Instance Method Summary collapse
-
#discover_name ⇒ Object
Discover the airport’s full name based on ICAO code.
-
#discover_variance ⇒ Object
Discover the airport’s magnetic variance based on ICAO code.
-
#initialize(code = nil, **kvargs) ⇒ Airport
constructor
Params: :code, :name, :variance.
-
#magnetic_heading_from(departure) ⇒ Object
Calculate the magnetic heading from the specified airport.
-
#magnetic_heading_to(arrival) ⇒ Object
Calculate the magnetic heading to the specified airport.
-
#magnetic_to_true(heading) ⇒ Object
Convert a magnetic heading to true based on the airport’s magnetic variance.
-
#to_s ⇒ Object
Print the Airport ICAO code.
-
#true_heading_from(departure) ⇒ Object
Calculate the true heading from the specified airport.
-
#true_heading_to(arrival) ⇒ Object
Calculate the true heading to the specified airport.
-
#true_to_magnetic(heading) ⇒ Object
Convert a true heading to magnetic based on the airport’s magnetic variance.
Constructor Details
#initialize(code = nil, **kvargs) ⇒ Airport
Params: :code, :name, :variance
22 23 24 25 26 |
# File 'lib/atc-tools/airport.rb', line 22 def initialize(code = nil, **kvargs) @code = code || (kvargs.fetch :code, '') @name = kvargs.fetch :name, '' @variance = kvargs.fetch :variance, 20.0 # ZSE Standard Variance end |
Instance Attribute Details
#code ⇒ Object
Airport’s ICAO code.
9 10 11 |
# File 'lib/atc-tools/airport.rb', line 9 def code @code end |
#heading_uri ⇒ Object (readonly)
URI of the web page used for the last heading lookup.
18 19 20 |
# File 'lib/atc-tools/airport.rb', line 18 def heading_uri @heading_uri end |
#name ⇒ Object
Airport’s full name.
29 30 31 32 |
# File 'lib/atc-tools/airport.rb', line 29 def name discover_name if @name.empty? @name end |
#name_uri ⇒ Object (readonly)
URI of the web page used for the last airport name lookup.
16 17 18 |
# File 'lib/atc-tools/airport.rb', line 16 def name_uri @name_uri end |
#variance ⇒ Object
Airport’s magnetic variance from true north.
13 14 15 |
# File 'lib/atc-tools/airport.rb', line 13 def variance @variance end |
Instance Method Details
#discover_name ⇒ Object
Discover the airport’s full name based on ICAO code.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/atc-tools/airport.rb', line 36 def discover_name @name_uri = "http://www.airnav.com/airport/#{@code.to_s.downcase}" response = Net::HTTP.get URI name_uri l = response.scan %r{(?i:<title>)(?:AirNav:\s*\w*\s*-\s*)(.*)(?i:</title>)} unless l.flatten.count > 0 @name = ' ' raise ATCTools::NameDiscoveryError, "Could not discover name for #{@code.to_s.upcase}" end @name = l.flatten.first end |
#discover_variance ⇒ Object
Discover the airport’s magnetic variance based on ICAO code.
53 54 |
# File 'lib/atc-tools/airport.rb', line 53 def discover_variance end |
#magnetic_heading_from(departure) ⇒ Object
Calculate the magnetic heading from the specified airport. Takes an ICAO code or Airport object.
83 84 85 |
# File 'lib/atc-tools/airport.rb', line 83 def magnetic_heading_from(departure) true_to_magnetic true_heading_from(departure) end |
#magnetic_heading_to(arrival) ⇒ Object
Calculate the magnetic heading to the specified airport. Takes an ICAO code or Airport object.
77 78 79 |
# File 'lib/atc-tools/airport.rb', line 77 def magnetic_heading_to(arrival) true_to_magnetic true_heading_to(arrival) end |
#magnetic_to_true(heading) ⇒ Object
Convert a magnetic heading to true based on the airport’s magnetic variance.
97 98 99 100 101 |
# File 'lib/atc-tools/airport.rb', line 97 def magnetic_to_true(heading) value = heading + @variance value -= 360.0 if value > 360.0 value end |
#to_s ⇒ Object
Print the Airport ICAO code. Allows the object to act as a direct replacement for string input.
105 106 107 |
# File 'lib/atc-tools/airport.rb', line 105 def to_s @code.to_s.upcase end |
#true_heading_from(departure) ⇒ Object
Calculate the true heading from the specified airport. Takes an ICAO code or Airport object.
71 72 73 |
# File 'lib/atc-tools/airport.rb', line 71 def true_heading_from(departure) 360.0 - true_heading_to(departure) end |
#true_heading_to(arrival) ⇒ Object
Calculate the true heading to the specified airport. Takes an ICAO code or Airport object.
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/atc-tools/airport.rb', line 58 def true_heading_to(arrival) @heading_uri = "http://www.aeroplanner.com/calculators/avcalcdist.cfm?typ1=APT&Txt1=#{@code.downcase}&typ2=APT&Txt2=#{arrival.to_s.strip.downcase}&londir1=East&lond=&londir2=East&londd=&lonmm=&lonss=&calculate=Calculate" response = Net::HTTP.get URI heading_uri r = response.scan /(?i:<b>\s*initial course:\s*<\/b>)\s*\b([\d\.]+)\b/ raise ATCTools::HeadingDiscoveryError, "Heading from #{@code.upcase} to #{arrival.to_s.upcase} not found." \ unless r.count > 0 true_hdg = r.flatten.first.to_f end |
#true_to_magnetic(heading) ⇒ Object
Convert a true heading to magnetic based on the airport’s magnetic variance.
89 90 91 92 93 |
# File 'lib/atc-tools/airport.rb', line 89 def true_to_magnetic(heading) value = heading - @variance value += 360.0 if value < 0 value end |