Flight data can be uploaded to a CloudAhoy account or sent from any iOS app to the CloudAhoy app using CSV, GPX, KML file formats. To request access to the CloudAhoy APIs, contact team@cloudahoy.com
Loading Data: two ways
There are two ways to upload flight data into a CloudAhoy user’s account.
1. Direct Upload to CloudAhoy’s Server
Data can be uploaded directly to the CloudAhoy server. Which user’s account the data should be sent to can be specified. This is done via an HTTP POST request to a special CloudAhoy endpoint, the details of which are in the CloudAhoy User Flights API article. The flight data should be in CloudAhoy’s CSV format, described in the following article:
The flight data can be in another format but will need to be approved and tested with CloudAhoy.
Examples of when direct upload to CloudAhoy servers is desirable are:
- Uploading data from an iOS or Android app
- Uploading data from a Javascript client
- Uploading data from a server
2. Upload from iOS-to-iOS
Flight data can be sent from any iOS app, such as ForeFlight Mobile, to the CloudAhoy iOS app. The CloudAhoy app will then upload the data automatically to the user’s account on the CloudAhoy server. The flight data can be in GPX, KML, and CSV formats, including Garmin G1000/G3000, G3X and G5, Stratus 2s via ForeFlight, Dynon, GRT, and Avidyne. KML and GPX files need to contain mandatory components per file type, which are described later in this article. KML and GPX files may have additional optional tags for providing additional information.
From the user’s perspective, this is the sequence of events:
- The flight is logged by an iOS app.
- The user taps a “Send To” icon on the app. The app needs to use the UIDocumentInteractionController mechanism.
- The user sees a list of apps to send the data to and selects CloudAhoy.
- The CloudAhoy app is opened and requires the user to confirm the upload.
- The data is transferred into the user’s CloudAhoy account.
GPX Files
Flight data in GPX files must be inside <trkseg>
tags, each corresponding to one point.
Each <trkseg>
must define lat
and lon
coordinates. It must include one <ele>
defining the point’s altitude (meters), and one <time>
defining the point’s time. The time can include fractional seconds, for example 2014-06-14T12:53:30.302Z.
The following is an example of a GPX track with the mandatory tags:
<trk> <trkseg> <trkpt lat="37.694489" lon="-121.810966"><ele>3115.1</ele> <time>2014-05-24T16:55:38Z</time></trkpt> <trkpt lat="37.694551" lon="-121.810856"><ele>3114.8</ele> <time>2014-05-24T16:55:39Z</time></trkpt> . . .
Optional GPX extensions: attributes
A GPX file can have any number of attributes inside <metadata><extensions>
, and they are parsed by CloudAhoy and stored with the flight. Three optional attributes have a special meaning:
- The logger device’s model name in
myapp:GPSModelName
- The flight’s title in
myapp:flightTitle
- The flight route in
myapp:routeWaypoints
In the above, replace myapp
with your app’s name. CloudAhoy ignores hierarchical extensions.
Example:
<metadata> <extensions> <appic:GPSModelName>GR-1000</appic:GPSModelName> <appic:flightTitle>Island hopping</appic:flightTitle> <appic:routeWaypoints>KMVY KACK</appic:routeWaypoints> </extensions> </metadata>
KML Files
Flight data in KML files must be inside a <gx:Track>
tag.
Each point is defined by one <gx:coord>
tag, including the longitude, latitude, and altitude, and one <when>
tag defining the point’s time. Each <gx:coord>
must have a corresponding <when>
tag, and vice versa. The time can include fractional seconds, for example “2014-06-14T12:53:30.302Z
“.
All the <altitudeMode>
tags, if any, must be absolute
.
The following is an example of a KML track with mandatory tags:
<gx:Track> <altitudeMode>absolute</altitudeMode> <when>2014-16-05T16:44:35.123Z</when> <gx:coord>-80.127385 34.942763 3203.29306041840002</gx:coord> <when>2014-16-05T16:44:36.123Z</when> <gx:coord>-80.126441 34.942453 3203.0816343744</gx:coord> . . .
Optional KML extensions: lateral and vertical accuracy
Each point’s lateral accuracy (meters) can be expressed in a <gx:SimpleArrayData name="acc_horiz">
data, as seen below:
<ExtendedData> <SchemaData> <gx:SimpleArrayData name="acc_horiz"> <gx:value>10</gx:value> <gx:value>5</gx:value> ....
The array’s values must correspond to the points data. There has to be the same number of <gx:value>
as there are <gx:coord>
or <when>
data.
Likewise, vertical accuracy (meters) can be expressed in a <gx:SimpleArrayData name="acc_horiz">
array.
Optional KML extensions: attributes
A KML file can have any number of attributes inside <ExtendedData>
and they are parsed by CloudAhoy and stored with the flight. Three optional attributes have a special meaning:
- The logger device’s model name in
GPSModelName
- The flight’s title in
flightTitle
- The flight route in
routeWaypoints
Example:
<ExtendedData> <Data name="GPSModelName"> <value>Bad Elf GPS Pro</value> </Data> <Data name="flightTitle"> <value>Chandelles, in the practice area</value> </Data> <Data name="routeWaypoints"> <value>KBED BOS DUNKK MVY</value> </Data> </ExtendedData>
Last Updated: