local lib = {}; -- lib.distance_method = Distance_method.great_circle; -- 35km discount airports: CYBR,CYCG,CYCL,CYYG,CCH4,CYYQ,CZUM,CYXC,CYVZ,CYDF,CYEG,CYMM,CZFM,CYER,CYSM,CYXJ,CYFC,CYQX,CYQU,CYHM,CYOJ,CYGR,CYEV,CYFB,CYKA,CYLW,CYQK,CYGK,CYKF,CYVP,CYGW,CYGL,CYVC,CYQL,CYLL,CYXU,CYXH,CYQM,CYYY,CYVQ,CYQW,CYYB,CKQ3,CYPE,CYYF,CYZT,CYPD,CCP4,CYPA,CYXS,CYPR,CYRT,CYQF,CYUY,CYAM,CYZV,CYYD,CYS,CYXT,CYTH,CYTS,CYWK,CYZU,CYXY,CCA6,CYWL,CYZF -- 65km discount airports: CYAV,CYXX,CYBW,CYYC,CYBL,CYRC,CYEG,CYND,CYHZ,CYNJ,CYMX,CYUL,CYHU,CYCD,CYOW,CYPK,CYQB,CYQR,CYXE,CYJN,CYQT,CYTZ,CYKZ,CYYZ,CZBB,CYVR,CYWH,CYYJ,CYWG function findIcao(list, icao) for i, v in ipairs(list) do if (v == icao) then return true end end return false end function lib:calculate(flight_context, route_context, distance) return self:estimate(flight_context, distance); end function lib:estimate(flight_context, distance) local reducedDist = 0 local airportsWith35Discount = {'CYBR', 'CYCG', 'CYCL', 'CYYG', 'CCH4', 'CYYQ', 'CZUM', 'CYXC', 'CYVZ', 'CYDF', 'CYEG', 'CYMM', 'CZFM', 'CYER', 'CYSM', 'CYXJ', 'CYFC', 'CYQX', 'CYQU', 'CYHM', 'CYOJ', 'CYGR', 'CYEV', 'CYFB', 'CYKA', 'CYLW', 'CYQK', 'CYGK', 'CYKF', 'CYVP', 'CYGW', 'CYGL', 'CYVC', 'CYQL', 'CYLL', 'CYXU', 'CYXH', 'CYQM', 'CYYY', 'CYVQ', 'CYQW', 'CYYB', 'CKQ3', 'CYPE', 'CYYF', 'CYZT', 'CYPD', 'CCP4', 'CYPA', 'CYXS', 'CYPR', 'CYRT', 'CYQF', 'CYUY', 'CYAM', 'CYZV', 'CYYD', 'CYS', 'CYXT', 'CYTH', 'CYTS', 'CYWK', 'CYZU', 'CYXY', 'CCA6', 'CYWL', 'CYZF'} local airportsWith65Discount = {'CYAV', 'CYXX', 'CYBW', 'CYYC', 'CYBL', 'CYRC', 'CYEG', 'CYND', 'CYHZ', 'CYNJ', 'CYMX', 'CYUL', 'CYHU', 'CYCD', 'CYOW', 'CYPK', 'CYQB', 'CYQR', 'CYXE', 'CYJN', 'CYQT', 'CYTZ', 'CYKZ', 'CYYZ', 'CZBB', 'CYVR', 'CYWH', 'CYYJ', 'CYWG'} if (findIcao(airportsWith35Discount, flight_context.origin_icao_code) and findIcao(airportsWith35Discount, flight_context.destination_icao_code)) then reducedDist = 70000 -- departure and arrival discount 35km elseif (findIcao(airportsWith35Discount, flight_context.origin_icao_code) or findIcao(airportsWith35Discount, flight_context.destination_icao_code)) then reducedDist = 35000 -- departure or arrival discount 35km elseif (findIcao(airportsWith65Discount, flight_context.origin_icao_code) and findIcao(airportsWith65Discount, flight_context.destination_icao_code)) then reducedDist = 130000 -- departure and arrival discount 65km elseif (findIcao(airportsWith65Discount, flight_context.origin_icao_code) or findIcao(airportsWith65Discount, flight_context.destination_icao_code)) then reducedDist = 65000 -- departure or arrival discount 65km elseif (findIcao(airportsWith35Discount, flight_context.origin_icao_code) and findIcao(airportsWith65Discount, flight_context.destination_icao_code)) then reducedDist = 100000 -- departure or arrival discount 35km elseif (findIcao(airportsWith65Discount, flight_context.origin_icao_code) and findIcao(airportsWith35Discount, flight_context.destination_icao_code)) then reducedDist = 100000 -- departure or arrival discount 35km end return math.max(distance-reducedDist,0)/1000 * self.unit_rate * math.sqrt(flight_context.mtom/1000) end return lib;
We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy. Accept Learn more