Flight CO2 Calculator
About
This plugin provides a collection of classes that can be used to:
- Load a list of airports from the OpenFlights.org dataset.
- Lookup airports matching a search query against the entire data-set of airports.
- Calculate the distance and CO2 emissions from flights.
What you can do with this
Build a Flight CO2 Calculator app such as this:
How to use it
Load data:
List<Airport> airports = await AirportDataReader.load('data/airports.dat');
Create an AirportLookup
service:
final airportLookup = AirportLookup(airports: airports);
Search for airports matching a query:
List<Airport> results = airportLookup.searchString(query);
Calculate distance and CO2 emissions:
class FlightCalculationData {
FlightCalculationData({this.distanceKm, this.co2e});
final double distanceKm;
final double co2e;
}
FlightCalculationData _calculate(FlightDetails flightDetails) {
double distanceKm;
double co2e;
Airport departure = flightDetails.departure;
Airport arrival = flightDetails.arrival;
if (departure != null && arrival != null) {
double multiplier =
flightDetails.flightType == FlightType.oneWay ? 1.0 : 2.0;
distanceKm = DistanceCalculator.distanceInKmBetween(
departure.location, arrival.location);
distanceKm = CO2Calculator.correctedDistanceKm(distanceKm);
co2e =
CO2Calculator.calculateCO2e(distanceKm, flightDetails.flightClass) *
multiplier;
}
return FlightCalculationData(distanceKm: distanceKm, co2e: co2e);
}
Example
See the sample Flight CO2 Calculator app bundled with the project in the example
folder.
License: MIT
Libraries
Dart
- dart:ffi
- Foreign Function Interface for interoperability with the C programming language. [...]
- dart:html
- HTML elements and other resources for web-based applications that need to interact with the browser and the DOM (Document Object Model). [...]
- dart:js
- Low-level support for interoperating with JavaScript. [...]
- dart:js_util
- Utility methods to efficiently manipulate typed JSInterop objects in cases where the name to call is not known at runtime. You should only use these methods when the same effect cannot be achieved with @JS annotations. These methods would be extension methods on JSObject if Dart supported extension methods.