AviationKit
Overview
The FAA provides weather reports and additional notices on a XML based server format. The FAA weather server provides METAR’s, TAF’s, AIREP, AIR/SIGMET’s, G-AIRMET’s, and STATION INFO.
The initial release of the library contains basic METAR and TAF information based on location. As the library grows, additional functionality and additional reports will be added.
In addition to the FAA documentation, there is a documentation server here on github. The documentation will continue to be updated reguarding the classes, structures, enums and everything.
Example
The pod contains a fully functional example app. To run the example project, clone the repo, and run pod install
from the Example directory first.
Requirements
In order to keep the library up to date, we will develop one OS level behind the current iOS version. For example, as iOS current version is 12, we will develop this project at iOS version 11. When iOS version 13 is released, this project will update to iOS 12 and the back level.
Installation
AviationKit is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'AviationKit'
Screenshots
METAR By Location | TAF By Location |
---|---|
METAR Sample | TAF Sample |
---|---|
Usage
The reports are created using the base report function and the proper report parameter structure. The core reporting function is:
let reports = Reports()
reports.getReport(parmStructure) { (results, error) in
// code here
}
METAR
The METAR report is generated using the MetarParams
structure. There are no parameter checking processes.
You are responsible for setting the correct parameters as described in the FAA weather site.
If you set incorrect parameters, the error is returned from the API endpoint in the error
variable of the closure.
METAR example:
var metarParms = MetarParams()
metarParms.areaConstraint = AreaConstraints(Coordinates(location.longitude, location.latitude), milesRadius)
let reports = Reports()
reports.getReport(metarParms) { (results, error) in
if let res = results, let resultsarray = res as? [METAR] {
// process the METAR array
} else {
// process the error
}
}
Options
This list of valid options was taken from the FAA website on 6/4/19. Please check the site and let me know if you are receiving errors while following this guide. Please review the FAA site to determine the correct options to retrieve the data you would like. I will not repeat the constraints here as they may change. This chart is describing the FAA variables to the AviationKit variables.
FAA Variable | Variable | Variable Type | Notes |
---|---|---|---|
stationString | StationConstraints.stationString | [String] | An array of four letter airport station abbreviations assigned by the FAA. This allows for multiple entries in one request. |
startTime | StartEnd.startTime | Int | start and end times in seconds since January 1, 1970 |
endTime | StartEnd.endTime | Int | start and end times in seconds since January 1, 1970 |
hoursBeforeNow | TimeConstraints.hoursBeforeNow | Double | Any positive floating point number. Based on the METAR observation time |
mostRecent | MetarParams.mostRecent | Bool | Defaults to false . Optional value. |
mostRecentForEachStation | StationConstraints.mostRecentForEachStation | enum | There are 4 values in the MostRecentForEachStationConstraints enum. The default is false . |
minLat | CoordinateRectangle.minimum.latitude | Double | Part of the rectangle bounds |
maxLat | CoordinateRectangle.maximum.latitude | Double | Part of the rectangle bounds |
minLon | CoordinateRectangle.minimum.longitude | Double | Part of the rectangle bounds |
maxLon | CoordinateRectangle.maximum.longitude | Double | Part of the rectangle bounds |
radialDistance | AreaConstraints.radiusInMiles | Int | Radius in statute miles |
flightPath (radial distance) | flightPathCoordinates.maxDistanceInMiles | Double | The number of statute miles from the path |
flightPath (Coordinates array) | flightPathCoordinates | [CoordinatePath] | See the CoordinatePath fir definition. |
CoordinatePath.leg | Int | The leg for this coordinate path - default 1 | |
CoordinatePath.endPoint | Coordinates | The end point for this path (optional) | |
CoordinatePath.startPoint | Coordinates | The starting point for this path (optional) | |
CoordinatePath.stationString | String | An airport station rather than coordnates for this path | |
minDegreeDistance | MetarParams.minimumDegreeDistance | Double | 0 < any value <90. The degree distance is the distance (based on longitude and latitude) between stations. The larger the value of minDegreeDistance, the less dense the results. Duplicate stations are filtered and the most recent of duplicate stations is reported. |
fields | MetarParams.fields | [String] | The fields you would like to return after processing. Refer to FAA docs for the fields available. |
TAF
The TAF reports are still using the older functions. You use the Comms
object to get the TAF information. There are only a few options at this time - more updates to come!
TAF example:
let location = CLLocationCoordinate2D(latitude: 38.920898, longitude:-77.031372)
let milesRadius = 10
let comms = Comms()
comms.getTAF(location, milesRadius) { (results, error) in
// process the results array of [TAF] objects
}
Author
Mike Silvers, mikesilvers@gmail.com
License
AviationKit is available under the MIT license. See the LICENSE file for more info.