Skip to main content
7 pages combined into one document. Tip: enable Background graphics in the print dialog so note and warning boxes keep their shading.
All printable guides
Dronetag
Developers

Export Formats

Document
Developers — Export Formats
Chapters
7
Source
help.dronetag.cz/print/developers/export-formats
Dronetag s.r.o. · The online version of this document is always the authoritative one.

Which Export to Choose

Dronetag exports flights and detections in a few file formats. The formats are the same wherever you export from, for example the Dronetag App, the Dronetag Export service or your own software through the Dronetag API. This section describes the files. What you can choose in each place is described on that place's own page, such as Exporting Data in the Dronetag App.

This page helps you pick a format.

A flight is reported by a Dronetag device on your own drone. A detection is a drone that one or more of your receivers heard, for example a Dronetag Scout. Flights and detections use the same file formats. A detection fills in a few extra fields, such as which receiver heard it.

Pick a Format​

I want toChooseRead more
Replay a flight in 3DKMZKMZ for Google Earth
Give someone a printable reportPDFOne report per flight or detection
Work with every position in ExcelCSV, With tracksCSV Telemetry
List many flights in Excel, one row eachCSV, SummaryCSV Summary
Feed my own softwareJSONJSON

KML is the same map as KMZ, but without the icons and the colour legend. Google Earth shows its own default pins instead. Choose KML only if a tool can't open KMZ.

With Tracks or Summary​

JSON and CSV come in two versions. You pick one when you export.

  • With tracks has every recorded position. This is the default.
  • Summary has one entry per flight or detection, without the positions.

The figures in a Summary are still calculated from the whole track. Choose Summary when you export many flights. For 80 flights, a Summary is a few hundred kilobytes and With tracks is tens of megabytes.

Units and Times​

JSON and CSV always use metres, metres per second, degrees and seconds. Their times are in UTC.

KMZ and PDF use metric units, or imperial ones where the place you export from lets you choose. Their times are also in UTC, marked "(UTC)".

File Names​

You exportedFile name
80 flights from 1 to 7 May 2026dronetag-flights-80_20260501-20260507-telemetry.csv
One flightdronetag-flight_1596CEXAMPLE00001_20260917-0742Z-telemetry.csv

Detections say operations or operation instead of flights or flight. A Summary ends in -summary instead of -telemetry. A zip has the same name with the extension .zip. Dates and times in file names are in UTC.

Format Versions​

JSON, CSV Telemetry and CSV Summary are all version 1.0, and each has its own version. When something is only added, the second number goes up. When something is removed, renamed or changes meaning, the first number goes up. If your software reads JSON, read schema_version and check the first number before you read the rest.

When You Get a Zip File​

A CSV can arrive in a zip together with a file called ATTRIBUTION.txt. This happens when heights in the CSV were calculated from terrain data that must be credited. Keep the two files together when you pass the data on. See Terrain Data and Attribution.

Some places also put several formats, or a large selection split into parts, into one zip.

Files Safe to Share Publicly​

Some places can make a file that is safe to share publicly. The file then leaves out the pilot's name and ID, the pilot's positions and the take-off point. It also leaves out the callsign, the Self-ID text, the return-to-home point and the receivers that heard a detection.

Serial numbers keep their first four and last four characters. Registration numbers and operator IDs are hidden completely. The drone's own track stays in the file.

Example Files​

The examples on these pages come from these files. They are synthetic. Every name, serial number, receiver and registration in them is invented.

FileWhat it shows
telemetry-1-flight.jsonJSON With tracks, one flight
telemetry-1-detection.jsonJSON With tracks, one detection with its pilot positions
summary-3-flights.jsonJSON Summary, three flights
summary-3-detections.jsonJSON Summary, three detections
telemetry-1-flight.csvCSV Telemetry, one flight
telemetry-1-detection.csvCSV Telemetry, one detection
summary-3-flights.csvCSV Summary, three flights
summary-3-detections.csvCSV Summary, three detections
ATTRIBUTION.txtThe terrain credits that come in a zip with a CSV

In a real download the file names follow the pattern under File Names, and each of these CSVs would arrive in a zip with its ATTRIBUTION.txt.

CSV Telemetry

CSV Telemetry is the CSV you get with With tracks. It has one row for every recorded position. The file name ends in -telemetry.csv.

Flights and detections use the same 15 columns in the same order. A column that one kind never fills stays empty.

Columns​

#ColumnMeaningUnitEmpty whenIn JSON
1operation_idID of the flight or detectionoperations[].id
2timestampTime of the position, UTCtrack[].timestamp
3serial_numberSerial number. For a flight, the Dronetag device's.Not reportedIdentifier of type serial_number
4sensor_idReceiver that heard this positionFlights, or shared publiclytrack[].sensor_id
5operational_stategrounded, airborne or emergencyFlights, or not reportedtrack[].operational_state
6latitudeLatitude, WGS 84degreestrack[].location.latitude
7longitudeLongitude, WGS 84degreestrack[].location.longitude
8horizontal_speedSpeed over the groundm/sNot reportedtrack[].velocity.horizontal_speed
9vertical_speedClimb rate, positive when climbingm/sNot reportedtrack[].velocity.vertical_speed
10headingDirection of travel, clockwise from northdegreesNot reportedtrack[].velocity.heading
11alt_hae_wgs84Height above the WGS 84 ellipsoidmNot reportedAltitude of type HAE-WGS84
12alt_atoHeight above the take-off pointmNot reportedAltitude of type ATO
13alt_pressurePressure altitudemNot reportedAltitude of type PA-QNE
14alt_mslAltitude above mean sea levelmCan't be worked outAltitude of type MSL
15alt_aglHeight above the groundmNo sea level or no terrain dataAltitude of type AGL

The five altitude columns are explained in Altitudes Explained.

An empty cell means the value wasn't reported and Dronetag couldn't calculate it. A real zero, such as the speed of a hovering drone, is written as zero and never left empty.

CSV has no accuracies. If you need to know how exact a value is, use JSON.

Facts about the aircraft and the pilot are in CSV Summary. Its id column holds the same value as operation_id, so you can join the two files.

Example​

The first row of the example flight and of the example detection (synthetic data):

operation_id,timestamp,serial_number,sensor_id,operational_state,latitude,longitude,horizontal_speed,vertical_speed,heading,alt_hae_wgs84,alt_ato,alt_pressure,alt_msl,alt_agl
3f6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,2026-09-17T07:42:13.350390Z,1596CEXAMPLE00001,,,49.1679989,16.4950113,0.0,0.0,,327.1,0.08,255.81,282.13207082568454,0.43031044931819906
6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60,2026-09-22T15:31:04.048000Z,1581FEXAMPLE00000004,SCT-EXAMPLE-01,grounded,49.9599978,14.4999964,0.0,0.0,0.0,400.3,0.0,327.7,354.9,1.0917571914229143

The flight row has no receiver and no state. The detection row has both.

Opening It in Excel​

A CSV is written in one of two styles. Some places let you choose the style when you export.

  • Decimal point writes 1.5 and separates columns with commas. It suits English-language Excel, Numbers and LibreOffice.
  • Decimal comma writes 1,5 and separates columns with semicolons. It suits Czech, German and most other European set-ups.

When the style matches your Excel, double-click the file and it opens in columns. Accents and the degree sign display correctly.

If everything lands in one column, the file was written in the other style. Import it instead.

  1. In Excel, choose Data → From Text/CSV and pick the file.
  2. Set the delimiter to comma or semicolon.
  3. If numbers come out as text, choose Transform Data, select the columns and use Change Type → Using Locale.

The example detection's CSV Telemetry opened in Excel, one column per field

Numbers keep every digit the source reported. Format the cells in Excel if you want fewer decimals.

Reading It in a Program​

The file is UTF-8 with a byte order mark. In Python, open it with encoding="utf-8-sig". Lines end in CRLF and times end in Z (UTC). Numbers have full precision and no thousands separators. The header always has the same 15 columns.

If You Get a Zip File​

When alt_msl or alt_agl came from terrain data that must be credited, the CSV arrives in a zip with ATTRIBUTION.txt. Keep the two files together. See Terrain Data and Attribution.

CSV Summary

CSV Summary is the CSV you get with Summary. It has one row for each flight or detection. It doesn't contain the positions. The file name ends in -summary.csv.

Flights and detections use the same 37 columns in the same order. The figures are calculated from the whole track, exactly as in a With tracks export.

Columns​

The Who column says which kind fills the column. F means flights, D means detections.

Identity​

#ColumnWhoMeaningUnitEmpty whenIn JSON
1idF DID of the flight or detectionNeverid
2statusF DSee Status valuesNot reportedsummary.status
3sensor_idsDReceivers that heard it, separated by |Flightssummary.source.sources[].name
4serial_numberF DSerial number. For a flight, the Dronetag device's.Not reportedIdentifier of type serial_number
5callsignF DName the pilot gave the flight, or a manned aircraft's callsignNot setIdentifier of type custom_callsign, otherwise callsign
6caa_assignedDRegistration number from the aviation authorityNot broadcastIdentifier of type caa_assigned

Aircraft and Operator​

#ColumnWhoMeaningUnitEmpty whenIn JSON
7aircraft_manufacturerDManufacturer, such as DJIUnknownsummary.aircraft_manufacturer
8aircraft_modelF DModel, such as DJI Mavic 3Unknownsummary.aircraft_model
9aircraft_categoryDKind of aircraft, such as rotorcraftUnknownsummary.aircraft_category
10ua_classificationDEU category and class, such as open class_1Not broadcastsummary.ua_classification category and class
11uas_operator_idF DOperator registration numberNot reportedsummary.uas_operator_id
12pilot_idFPilot's ID in the Dronetag platformDetectionssummary.pilot.id
13pilot_nameFPilot's nameDetectionssummary.pilot.name
14message_countDMessages heard by all receivers togetherFlightssummary.message_count

When​

#ColumnWhoMeaningUnitEmpty whenIn JSON
15durationF DFrom the first to the last positionsNo positionssummary.duration
16time_first_telemetryF DTime of the first position, UTCNo positionssummary.time_first_telemetry
17time_last_telemetryF DTime of the last position, UTCNo positionssummary.time_last_telemetry

Where​

#ColumnWhoMeaningUnitEmpty whenIn JSON
18, 19take_off_latitude, take_off_longitudeF (D rarely)Take-off locationdegreesNot reportedsummary.take_off.location
20, 21first_latitude, first_longitudeF DFirst positiondegreesNo positionssummary.first
22, 23last_latitude, last_longitudeF DLast positiondegreesNo positionssummary.last
24, 25min_latitude, max_latitudeF DSouthern and northern edge of the trackdegreesNo positionssummary.bbox[1], summary.bbox[3]
26, 27min_longitude, max_longitudeF DWestern and eastern edge of the trackdegreesNo positionssummary.bbox[0], summary.bbox[2]

The first and last positions are where the record starts and ends. They are often not the take-off and landing, because a receiver starts hearing a drone when it comes into range.

How Far and How Fast​

#ColumnWhoMeaningUnitEmpty whenIn JSON
28point_countF DNumber of positionsNo positionssummary.point_count
29total_distanceF DDistance flown over the groundmFewer than 2 positionssummary.total_distance
30max_horizontal_speedF DHighest ground speedm/sNo speed reportedsummary.max_horizontal_speed
31operator_track_kindDoperator, take_off or mixed, see belowNo pilot positionsummary.operator_track_kind
32max_operator_distanceDLargest distance between drone and pilotmNo pilot positionsummary.max_operator_distance
33operator_movement_extentDHow far the pilot movedmNo pilot positionsummary.operator_movement_extent
34transmission_technologiesDHow the drone was heard, such as wifi_beacon, separated by |Flightssummary.source.transmission_technologies

operator_track_kind tells you what the pilot position is. operator is the pilot's real position. take_off means the drone sent only its take-off location, so the distances are measured from there. mixed is some of each.

Altitudes​

#ColumnWhoMeaningUnitEmpty whenIn JSON
35max_alt_atoF DHighest height above take-offmNot in the tracksummary.max_altitudes[] of type ATO
36max_alt_mslF DHighest altitude above sea levelmNot in the tracksummary.max_altitudes[] of type MSL
37max_alt_aglF DHighest height above the groundmNot in the tracksummary.max_altitudes[] of type AGL

There are no minimums. See Altitudes Explained.

Status Values​

ValueKindMeaning
plannedFlightCreated ahead of time and not started yet
currentFlight, detectionStill in progress when you exported it. The track may still grow.
inactiveFlightStill open, but the device stopped reporting
uploadingFlightRecorded offline and still being uploaded
processingFlightOver, and still being processed
errorFlightProcessing failed, so the record may be incomplete
finishedFlightOver and processed
cancelledFlightPlanned and never flown
pastDetectionOver
upcomingDetectionAnnounced and not started yet

Only in JSON​

CSV Summary keeps to the fields most people need. These are only in JSON:

  • Accuracies.
  • Start and end times as the source states them. These can differ from the first and last position.
  • The return-to-home point and the declared operation area of a flight.
  • Rare identifiers, the Self-ID text and the flight's colour.

Example​

One example flight and one example detection (synthetic data):

id,status,sensor_ids,serial_number,callsign,caa_assigned,aircraft_manufacturer,aircraft_model,aircraft_category,ua_classification,uas_operator_id,pilot_id,pilot_name,message_count,duration,time_first_telemetry,time_last_telemetry,take_off_latitude,take_off_longitude,first_latitude,first_longitude,last_latitude,last_longitude,min_latitude,max_latitude,min_longitude,max_longitude,point_count,total_distance,max_horizontal_speed,operator_track_kind,max_operator_distance,operator_movement_extent,transmission_technologies,max_alt_ato,max_alt_msl,max_alt_agl
3f6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,finished,,1596CEXAMPLE00001,EXAMPLE-FLIGHT-1,,,DJI Matrice 350 RTK,,,CZEexampleoper01,9b6b1c2e-8d4a-4b7f-9e21-5a0c7d3e9b14,Tomáš Example,,260.963047,2026-09-17T07:42:13.350390Z,2026-09-17T07:46:34.313437Z,49.1679989,16.4950113,49.1679989,16.4950113,49.168003,16.4949982,49.167991,49.1699201,16.4949881,16.4979653,262,1373.6529667703585,10.14401301260995,,,,,80.33,364.0258824461374,83.32078650204227
6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60,past,SCT-EXAMPLE-01|SCT-EXAMPLE-02,1581FEXAMPLE00000004,,OK-UAS-EXAMPLE-4,DJI,DJI Mavic 3,rotorcraft,open class_1,CZEexampleoper04,,,194,192.977,2026-09-22T15:31:04.048000Z,2026-09-22T15:34:17.025000Z,,,49.9599978,14.4999964,49.9599977,14.4999876,49.9599864,49.9620193,14.4999838,14.5036452,194,973.7599886011964,12.16,operator,261.9408504975598,44.46384785221796,wifi_beacon|wifi_nan,95.1,449.4,97.37793678299658

CSV Summary of three detections in Excel, columns A to N and AE to AK

The same columns for three flights. The detection-only columns stay empty.

CSV Summary of three flights in Excel, columns A to N and AE to AK

Joining It With CSV Telemetry​

id here and operation_id in CSV Telemetry hold the same value. Put both files in one workbook, with the summary on a sheet called Summary. In the telemetry sheet, add a column with this formula:

=XLOOKUP(A2, Summary!A:A, Summary!H:H)

It copies aircraft_model (column H) into each position row. If your Excel separates formula arguments with semicolons, use semicolons instead of the commas.

Cells With Several Values​

sensor_ids and transmission_technologies can hold several values separated by |. If a value itself contains | or \, a backslash is written in front of it.

Reading It in a Program​

The rules are the same as for CSV Telemetry. The file is UTF-8 with a byte order mark, lines end in CRLF and times are in UTC. The header always has the same 37 columns.

JSON

JSON is the complete export, meant for your own software. It has everything the CSV files have, plus accuracies, all identifiers, the pilot's positions and the terrain credits. The current version is 1.0.

  • With tracks has every flight or detection with all its positions. The file name ends in -telemetry.json.
  • Summary is the same file without track and operator_track. Everything else is identical. The file name ends in -summary.json.

The file is written on one line to keep it small. To read it, open it in a code editor and format it, or run jq . file.json.

Where DUMP (Dronetag Unified Message Protocol) has a name and shape for something, the export uses it. The JSON Schema of the file is published at:

https://api.dronetag.app/v2/export/schemas/export-v1.json

This page describes the file. The export endpoints are described in the Dronetag API documentation.

The Shape of the File​

{ schema_version, operations: [ { id, summary, operator_track, track }, … ], attribution }
KeyTypePresentWhat it is
schema_versionstringAlways"1.0"
operations[]arrayAlwaysThe flights and detections
attributionobjectWhen neededTerrain credits for the whole file. See Attribution.

summary.source.kind tells you what each entry is. rid_transmitter is a flight from a Dronetag device, rid_receiver is a detection and network_rid is network Remote ID.

The Who column in the tables on this page says which kind fills a key. F means flights, D means detections, F D means both when the source stated it.

Each entry has up to four keys, always in this order.

KeyTypeWhoWhat it is
idstringF DID of the flight or detection, the same as in the CSV files
summaryobjectF DEverything about it. First what the source reported, then what Dronetag calculated from the track. Identical in both exports.
operator_track[]array of operator pointsDThe pilot's positions. With tracks only.
track[]array of track pointsF DThe aircraft's positions. Always the last key. With tracks only.

CSV Summary is a flat copy of summary.

When a value wasn't reported and couldn't be calculated, its key is left out. It is never null and never replaced by zero.

Positions and Altitudes​

A track point from the example detection, formatted for reading:

{
"timestamp": "2026-09-22T15:31:25.923000Z",
"timestamp_accuracy": 0.1,
"sensor_id": "SCT-EXAMPLE-01",
"operational_state": "airborne",
"location": { "latitude": 49.9600514, "longitude": 14.5000551, "accuracy": 3.0 },
"altitudes": [
{ "type": "HAE-WGS84", "value": 459.4, "accuracy": 10.0 },
{ "type": "MSL", "value": 413.9 },
{ "type": "ATO", "value": 60.9 },
{ "type": "PA-QNE", "value": 388.6 },
{ "type": "AGL", "value": 59.99999999999994, "accuracy": 10.009657003780566 }
],
"velocity": { "horizontal_speed": 9.12, "vertical_speed": 0.83, "heading": 32.7, "speed_accuracy": 0.3 }
}

altitudes is a list with one item per kind of altitude. Look items up by type, not by their place in the list. The five types are explained in Altitudes Explained.

accuracy says how exact a value is, in metres (m/s for speeds). Roughly two times in three, the true value is within this amount. It appears only when the source reported it or Dronetag calculated it.

Two keys list longitude before latitude, because they follow the GeoJSON standard. They are summary.bbox (west, south, east, north) and summary.operation_area. Everywhere else latitude and longitude are named keys.

A Short Example​

The example detection, shortened. … marks what was left out.

{
"schema_version": "1.0",
"operations": [
{
"id": "6d2f8a41-93c7-4e0b-b5d2-1f7a9c3e8b60",
"summary": {
"source": {
"kind": "rid_receiver",
"transmission_technologies": ["wifi_beacon", "wifi_nan"],
"sources": [
{ "name": "SCT-EXAMPLE-01", "type": "rid_receiver", "message_count": 66 },
{ "name": "SCT-EXAMPLE-02", "type": "rid_receiver", "message_count": 128 }
]
},
"identifiers": [
{ "type": "caa_assigned", "value": "OK-UAS-EXAMPLE-4" },
{ "type": "serial_number", "value": "1581FEXAMPLE00000004" },
…
],
"uas_operator_id": "CZEexampleoper04",
"ua_classification": { "type": "european_union", "category": "open", "class": "class_1" },
…
"aircraft_model": "DJI Mavic 3",
"status": "past",
…
"duration": 192.977,
…
"point_count": 194,
"total_distance": 973.7599886011964,
…
"max_altitudes": [
{ "type": "HAE-WGS84", "value": 494.7, "accuracy": 3.0 },
…
{ "type": "AGL", "value": 97.37793678299658, "accuracy": 3.0320345204719112 }
],
"operator_track_kind": "operator",
"max_operator_distance": 261.9408504975598,
…
},
"operator_track": [
{ "timestamp": "2026-09-22T15:31:04.091000Z",
"location": { "latitude": 49.9599127, "longitude": 14.4998279, "accuracy": 4.0 },
"altitudes": [{ "type": "HAE-WGS84", "value": 401.4 }],
"source_type": "dynamic" },
…
],
"track": [ … 194 points like the one above … ]
}
],
"attribution": {
"terrain_credits": ["„ČÚZK, 2026“ … by Dronetag"]
}
}

The complete example files can be downloaded from Which Export to Choose.

Every Key​

Summary Keys Stated by the Source​

These come first in summary, in this order.

KeyTypeWhoDescription
sourceobjectF DWhere the data come from. See Source.
identifiers[]array of {type, value}F DTypes per DUMP. For drones serial_number, caa_assigned (registration from the aviation authority), utm_assigned, specific_session_id, custom_callsign (the name the pilot gave the flight). For manned aircraft callsign, icao_address, registration, squawk_code, flarm_id, ogn_address. Also other. A flight has serial_number (the device's) and custom_callsign.
uas_operator_idstringF DThe UAS operator's registration number
ua_classificationobject {type, category, class}Dtype is european_union. category is open, specific or certified. class is class_0 to class_6.
aircraft_categorystringDDUMP value, for example rotorcraft (helicopter and multirotor), aeroplane, glider or unknown. The full list of 28 values is in the JSON Schema.
aircraft_manufacturerstringDManufacturer
aircraft_modelstringF DFull model name, usually starting with the manufacturer, for example DJI Mavic 3
descriptions[]array of {type, value}F DTypes text_description (Self-ID text), emergency_description, extended_status_description, custom_color. The callsign is not here. It is in identifiers as custom_callsign.
statusstringF DThe values and their meaning are listed in CSV Summary.
pilotobject {id, name}FThe pilot. Removed when the export is made safe to share publicly.
time_start, time_endstring (time)F DStart and end as the source states them. These are not the first and last positions.
take_offpoint objectF (D rarely)Take-off location as the source states it
home_locationpoint objectF DReturn-to-home point, if the source states it
operation_areaobjectFThe declared area, exactly the GeoJSON the source sends. Any geometry or Feature, longitude before latitude.

Source​

KeyTypeWhoDescription
kindstringF Drid_transmitter (a flight from a Dronetag device), network_rid (network Remote ID) or rid_receiver (a detection)
standardstringF DThe Remote ID standard, if the source states it
transmission_technologies[]array of stringDDUMP 0.15 values. Remote ID wifi_beacon, wifi_nan, bluetooth_legacy, bluetooth_long_range. Manned aviation ads_b, ads_l, uat, flarm, ogn. Also ocusync and external.
sources[]array of {name, type, position, message_count}DThe receivers that heard the operation. name is the receiver ID, type is rid_receiver, position is a point object when known and message_count is how many messages it heard.

Track Point​

KeyType, unitWhoDescription
timestampstring (time)F DTime of the position
timestamp_accuracynumber, sDStated accuracy of the time
sensor_idstringDThe receiver that heard the position
operational_statestringDgrounded, airborne or emergency
locationobjectF Dlatitude and longitude in degrees (WGS 84), accuracy in metres when stated
altitudes[]array of altitude itemsF DEvery altitude of the point
velocityobjectF Dhorizontal_speed (m/s), vertical_speed (m/s, positive up), heading (degrees clockwise from north), speed_accuracy (m/s). Also turn_rate (degrees per second), components (east, north and up speed in m/s) and components_accuracy (m/s). Each key only when stated.
rssinumber, dBmDSignal strength, only when the source states it

Altitude Item​

KeyType, unitDescription
typestringHAE-WGS84, MSL, ATO, PA-QNE or AGL. See Altitudes Explained.
valuenumber, mThe value
accuracynumber, mOne standard deviation. When it is present is described in Altitudes Explained.

A flight from a Dronetag device usually has HAE-WGS84, ATO and PA-QNE. A detection usually has HAE-WGS84 and PA-QNE, often ATO and sometimes MSL stated by the source. Dronetag adds MSL when the source didn't state it and it can be calculated, and AGL when terrain data is available.

Point Object​

Used for take_off, home_location and sources[].position.

{"location":{"latitude":49.1679989,"longitude":16.4950113},"altitudes":[{"type":"HAE-WGS84","value":327.1},{"type":"PA-QNE","value":255.81}]}
KeyTypeDescription
locationobjectlatitude and longitude in degrees, accuracy in metres when stated
altitudes[]array of altitude itemsThe altitudes the source stated for the point. May be empty.

Operator Point​

KeyTypeDescription
timestampstring (time)Time of the position
locationobjectAs in a track point
altitudes[]array of altitude itemsWhen the source stated them
source_typestringdynamic (the pilot's real position over time), fixed (stated once) or take_off (the take-off location sent in place of the pilot's position)

Summary Keys Calculated by Dronetag​

These follow the source keys in summary and are identical in both exports.

KeyType, unitWhoDescription
time_first_telemetry, time_last_telemetrystring (time)F DFirst and last received position
durationnumber, sF DThe difference of the two
first, lastobject {latitude, longitude}F DFirst and last position in degrees
bboxarray of 4 numbersF DEnvelope of the track as a GeoJSON bbox, [min_lon, min_lat, max_lon, max_lat]
point_countintegerF DNumber of received positions
total_distancenumber, mF DHorizontal distance flown. Small movement while standing still is not counted.
max_horizontal_speednumber, m/sF DHighest ground speed
max_altitudes[]array of altitude itemsF DThe highest value of each altitude type in the track, with the accuracy of the point where it occurred (only when that point has one). There are no minimums.
operator_track_kindstringDoperator (real positions), take_off (take-off location only) or mixed
max_operator_distancenumber, mDLargest horizontal distance between the aircraft and the pilot, or the take-off location
operator_movement_extentnumber, mDDiagonal of the envelope of the pilot's positions
message_countintegerDMessages heard by all receivers together

Attribution​

{"terrain_credits":["…"],"terrain_liability_notices":["…"]}
KeyTypeDescription
terrain_credits[]array of stringThe credit each terrain model's licence requires, word for word, each text once
terrain_liability_notices[]array of stringThe legal notice, when a licence requires one, each text once

The credits belong to the whole file, not to an operation. When they appear and why they must stay with the data is described in Terrain Data and Attribution.

Altitudes Explained

A drone's height can be measured from several starting points, and Remote ID reports several of them. The exports keep each one under its own name, so you always know which one you are reading.

JSON typeCSV columnMeasured fromComes from
HAE-WGS84alt_hae_wgs84The WGS 84 ellipsoid, the smooth model of the Earth that GPS usesThe drone (GPS)
MSLalt_mslMean sea levelThe drone, or calculated by Dronetag
ATOalt_atoThe take-off pointThe drone
PA-QNEalt_pressureStandard air pressure (1013.25 hPa)The drone (barometer)
AGLalt_aglThe ground under the droneCalculated by Dronetag

All values are in metres.

A drone 60 m above a hill, with arrows for its five altitudes

One Point, Five Altitudes​

A point from the example detection, about 60 m above the ground:

TypeValueWhat it means
HAE-WGS84459.4 mHeight above the ellipsoid. In Czechia the ellipsoid lies about 45 m below sea level, so this number is the highest.
MSL413.9 mAltitude above sea level
ATO60.9 mHeight above the place it took off from
AGL60.0 mHeight above the ground under it. It is close to ATO here because the ground is about as high as at take-off. On a slope the two differ.
PA-QNE388.6 mThe barometer's reading. It is 25 m off the sea-level altitude because real air pressure is never exactly standard.

Which One to Use​

QuestionUse
How high above the ground?AGL
How high above where it took off?ATO
How high above sea level, for example to compare with airspace limits?MSL
What did the GPS say?HAE-WGS84

Pressure altitude changes with the weather and isn't corrected for local air pressure. Don't use it as height above sea level.

Why the height above take-off can be negative, and why many drones show it as "AGL", is explained in Understanding Altitude Values.

When MSL Is Empty​

If the drone reported a sea-level altitude, the export keeps it. Otherwise Dronetag calculates one from the GPS height. If there is no GPS height, Dronetag uses the height of the take-off point plus the height above take-off.

When none of this is possible, MSL is empty. The file doesn't say which way the value was found.

When AGL Is Empty​

AGL is the sea-level altitude minus the height of the ground at that place. The ground height comes from a terrain model. AGL is empty when there is no sea-level altitude or no terrain data for that place. See Terrain Data and Attribution.

A height slightly below zero is normal for a drone standing on the ground. The example flight starts at 0.43 m and goes down to -1.04 m before take-off. Values this close to zero mean "on the ground".

Over forest and in towns, AGL can read low. Some terrain models measure the top of trees and roofs, not the soil.

Accuracy​

In JSON, an altitude can have an accuracy in metres. Roughly two times in three, the true value is within this amount.

  • A value the drone reported has an accuracy only if the drone reported one.
  • AGL has an accuracy.
  • A calculated MSL has one when the value it was calculated from had one. It also includes the error of the conversion, 0.4 m through the geoid or 3.5 m through the take-off point.

CSV files have no accuracies. KMZ and PDF show the height above ground as an estimate, for example "97 m (estimated, ±3.0 m)".

KMZ and PDF calculate the height above ground from the GPS height. When a drone also reported its own sea-level altitude, their figure can differ a little from the one in JSON and CSV.

Altitudes in the Summary​

The summary of each flight or detection has the highest value of each altitude type. In JSON this is max_altitudes. In CSV Summary it is max_alt_ato, max_alt_msl and max_alt_agl. There are no minimums.

KMZ for Google Earth

A KMZ file shows your flights or detections on a 3D map. You can replay them, see where the pilot stood and click a marker for details. Open the file in Google Earth Pro. Most GIS tools can import it too.

Heights are drawn above sea level, so the track sits at the right height over the terrain in Google Earth.

What Is in the File​

Each flight or detection has its own folder, named after its serial number. Inside, every layer is a folder with its own checkbox in the Places panel, so you can turn layers on and off.

The Places panel in Google Earth Pro with the first detection's folder open

Shown When You Open the File​

LayerLooks likeWhat it shows
AircraftLight-blue dot with a white rimThe drone. It moves when you replay the flight.
PathLine coloured by speedThe whole track. Blue is slow, red is fast. The legend in the corner gives the values.
PilotWhite figure on a blue discWhere the pilot was. It moves with the replay. Detections only.
Take-off pointOrange take-off symbol on a white discShown when the drone sent its take-off location instead of the pilot's position. Detections only.
First seenGreen triangle pointing upThe first recorded position
Last seenRed triangle pointing downThe last recorded position
SummaryBlue dot with a white rim, in the middle of the trackClick it for the summary
Operation areaOutlined areaThe area declared for the flight, when there is one. Flights only.

First seen and last seen are not the take-off and landing. A receiver starts hearing a drone when it comes into range, often in mid-flight.

A detection in Google Earth Pro, tilted, with the path coloured by speed, the pilot and the summary dot

A flight in Google Earth Pro with its operation area

Turned Off When You Open the File​

Tick these in the Places panel when you need them.

LayerWhat it shows
Altitude curtainA wall from the track down to the ground, which makes the height easier to see
Velocity arrowsArrows in the direction of travel. Click one for the speed and time.
TethersLines from the drone to the pilot or take-off point, with the distance. Detections only.

The Summary​

Click the summary dot to see what the aircraft was, its identifiers and operator, when it was first seen, how long and how far it flew, its top speed and its greatest heights. A detection also shows the largest distance from the pilot and the receivers that heard it.

The summary balloon of a detection in Google Earth Pro

A few rows use different names from the CSV and JSON.

In the KMZIn CSV and JSON
Callsigncallsign (JSON: custom_callsign)
DescriptionThe Self-ID text the drone sent. JSON only.
First positiontime_first_telemetry
Max. Height (AGL)max_alt_agl

A record with no positions shows Start instead of First position.

Replaying a Flight​

Use the time slider at the top of the map. Press play or drag it. If you don't see the slider, choose View → Show Time.

The Follow the aircraft tour flies the camera along the track. Find it in the Places panel and press play.

Units, Times and Credits​

Distances, speeds and heights are in metric units, or imperial ones where the place you export from lets you choose. Times are in UTC, for example "15:31:04 (UTC)".

If the heights above ground came from terrain data that must be credited, the credit is in the description of each flight's folder, under Terrain data. See Terrain Data and Attribution.

Terrain Data and Attribution

To work out how high a drone was above the ground, Dronetag needs to know how high the ground is. That comes from terrain models, maps of ground height published by survey agencies and space programmes. Some of them may only be used if you credit them. This page says what you need to keep when you pass exported data on.

What Terrain Data Is Used For​

Terrain data gives the height above the ground (AGL) at every point.

It is also used for the sea-level altitude (MSL) in one case. When the drone reported no GPS height, Dronetag reads the ground height at the take-off point and adds the height above take-off.

Terrain Models​

Dronetag can use the terrain models below. For each place it uses the most detailed one available.

ModelCoversDetailMeasuresCredit needed
ČÚZK DMR 5GCzechia5 mBare groundYes
USGS 3DEPUnited StatesAbout 30 mBare groundNo
Copernicus DEM GLO-30Most of Europe30 mSurfaceYes, with a disclaimer
NOAA ETOPO 2022The whole worldAbout 1 to 2 kmBare groundNo

The map shows which model is used where. Drag it to move around and use the buttons to zoom in. Click an area or a model name to see its details.

Click a coloured area or a model above to see its details.

The Copernicus models measure the top of trees and buildings. Over forest or in towns, the height above the ground reads low by about the height of the trees or roofs.

Where the Credits Are​

An export carries credits only for the terrain it actually used, and only when that terrain needs a credit.

FormatWhere to find the credits
CSVThe download is a zip with the CSV and ATTRIBUTION.txt. If no credit is needed, you get the plain CSV.
JSONThe attribution key at the end of the file
KMZThe description of each flight's folder, under Terrain data
PDFThe Terrain Data section of the report

What ATTRIBUTION.txt Contains​

ATTRIBUTION.txt is a short English text file in UTF-8. It names the CSV it belongs to and the columns whose values came from terrain data. These are alt_agl and alt_msl in CSV Telemetry, and max_alt_agl and max_alt_msl in CSV Summary. Then it lists each terrain model with three parts.

  • The notice is the credit, word for word as the licence asks for it.
  • The disclaimer appears only when the licence asks for one. Copernicus does.
  • The licence line names the licence and links to it.

Lines are wrapped, but the wording never changes. A complete example is in ATTRIBUTION.txt.

A CSV zip opened in Windows Explorer, holding the CSV and ATTRIBUTION.txt

Why the Credits Must Stay With the Data​

The licences let you use and share the heights as long as the credit goes with them.

  • Keep ATTRIBUTION.txt with the CSV when you send, upload or publish it.
  • Keep the attribution block when you pass the JSON on.
  • If you publish something built from these heights, such as a chart or a report, include the notice texts exactly as written. Some licences require the exact wording.

If you are unsure what a licence allows, read it through the link in the file or ask the data provider.

Source pages

Every chapter of this document is a page of the Dronetag help site. Use these addresses to reach the latest version.

  1. 1Which Export to Choosehelp.dronetag.cz/developers/export-formats/which-export-to-choose
  2. 2CSV Telemetryhelp.dronetag.cz/developers/export-formats/csv-telemetry
  3. 3CSV Summaryhelp.dronetag.cz/developers/export-formats/csv-summary
  4. 4JSONhelp.dronetag.cz/developers/export-formats/json
  5. 5Altitudes Explainedhelp.dronetag.cz/developers/export-formats/altitudes-explained
  6. 6KMZ for Google Earthhelp.dronetag.cz/developers/export-formats/kmz
  7. 7Terrain Data and Attributionhelp.dronetag.cz/developers/export-formats/terrain-data-and-attribution