Interactive specification
One extension, three different files.
.wpt is not a format — it is three unrelated plain-text formats that happen to share a file extension. OziExplorer writes CSV, CompeGPS writes space-separated records with a degree sign, FS and GpsDump write fixed-column DMS. You cannot tell which you have from the name, so this page shows you how to tell from the bytes.
Three formats, one extension
A waypoint file is the simplest thing in free flight: a list of named places with coordinates and an elevation. It is also the least standardised. Three lineages produce files called .wpt, and none of them declares which it is in a way you can rely on:
| Dialect | Written by | Shape | Coordinates |
|---|---|---|---|
| OziExplorer | OziExplorer, many older GPS tools | Comma-separated, 18 columns | Signed decimal degrees |
| CompeGPS geographic | CompeGPS, Twonav | Space-separated, one record per line | Decimal degrees + hemisphere letter |
FS $FormatGEO | FS, GpsDump, comp organisers | Fixed-ish columns | Degrees / minutes / seconds |
A fourth thing you will meet is $FormatUTM — the same FS file with UTM grid coordinates instead of latitude and longitude. It cannot be read without knowing the grid zone, and it is not worth guessing: reject it and ask for a GEO export.
.utm. The CompeGPS dialect is sometimes saved with a .utm extension even when its coordinates are geographic — an old naming habit, not a statement about the projection. Sniff the content; never trust either extension.How to identify a .wpt
The check that works, in order — first match wins:
- Starts with
$FormatGEO→ FS / GpsDump. - Starts with
$Formatanything else (i.e.$FormatUTM) → reject, ask for a GEO export. - Starts with
OziExplorer→ OziExplorer. - Has a
G WGS 84datum line, or anyW <code> A <lat> <lon>record → CompeGPS. - Otherwise: contains a comma → OziExplorer, else CompeGPS. Headerless Ozi exports are common; commas are the tell.
The comma-separated dialect
OziExplorer Waypoint File Version 1.1
WGS 84
Reserved 2
Reserved 3
1,B02 Aujour,44.285000,5.740000,,0,1,3,0,65535,Aujour ridge,0,0,0,6017,6,0,17
2,B15 Hongrie,44.362000,5.715000,,0,1,3,0,65535,,0,0,0,-777,6,0,17
Four header lines, then one row per waypoint with 18 comma-separated columns. Most of them are display settings for OziExplorer's own map view and carry nothing you want.
| Column | Field | Notes |
|---|---|---|
| 1 | Index | 1-based row number. |
| 2 | Name | Commas are impossible here — the format has no quoting. Writers replace them with spaces. |
| 3 | Latitude | Signed decimal degrees, WGS84. |
| 4 | Longitude | Signed decimal degrees, WGS84. |
| 5 | Date | Ozi serial date. Usually empty. |
| 6–10 | Symbol, status, display format, colours | Presentation only. |
| 11 | Description | Free text. This is the second of the two text slots — see §06. |
| 12–14 | Pointer direction, Garmin format, proximity | Presentation only. |
| 15 | Altitude, FEET | -777 means unknown. Feet, not metres — the only dialect here that is not metric. |
| 16–18 | Font size, font style, symbol size | Presentation only. |
-777 is a sentinel, not an altitude. Read it as metres and every waypoint gains 3.28×; take -777 literally and you get waypoints 237 m below sea level.Rows are CRLF-terminated in files written by Ozi itself. Be tolerant on input, and emit CRLF on output for the benefit of the older tools that still read these.
The G/U/W dialect
G WGS 84 U 1 W Z20133 A 44.4102700000ºN 6.3516500000ºE 27-MAR-62 00:00:00 1329.000000 Chairlift W B02 A 44.2850000000ºN 5.7400000000ºE 01-JAN-70 00:00:00 1834.000000 Aujour ridge
| Line | Meaning |
|---|---|
G | Datum. WGS 84 in anything modern. |
U | Units / coordinate mode. 1 = geographic degrees. |
W | One waypoint. |
*, # | Comment lines. |
Inside a W record
| Token | Is | Notes |
|---|---|---|
| 1 | Code | Short identifier. No spaces — writers substitute underscores. |
| 2 | A | Datum marker. Skip it. |
| 3 | Latitude | 44.4102700000ºN — magnitude then hemisphere letter. |
| 4 | Longitude | 6.3516500000ºE. |
| 5, 6 | Date, time | File-transfer artefacts. Ignore them. |
| 7 | Elevation | Metres. -777 and -9999 are unknown-altitude sentinels. |
| 8+ | Full name | Everything remaining, spaces included. |
º is U+00BA, written by tools that assume Windows-1252. After a bad charset round trip it arrives as º, ?, or a replacement character. Match the coordinate as "digits, then up to two characters of junk, then [NSEW]" rather than requiring the symbol — files that are otherwise perfectly readable arrive this way constantly.Latitude can also appear as colon-separated DMS (44:24:36.97N). Accept both: split on :, and treat a single component as plain degrees.
The FS / GpsDump dialect
$FormatGEO
Z20133 N 44 24 36.97 E 06 21 05.94 1329 Chairlift
B02 N 44 17 06.00 E 05 44 24.00 1834 Aujour ridge
This is the format competition organisers hand out, because it is what GpsDump writes and what every comp instrument eats. One header line, then one record per waypoint:
| Field | Format | Notes |
|---|---|---|
| Code | token | Padded to 10 characters by convention. No spaces. |
| Latitude | N|S DD MM SS.ss | Hemisphere first, then three space-separated components. |
| Longitude | E|W DDD MM SS.ss | Same shape. |
| Elevation | integer | Metres. |
| Name | free text | Everything after the elevation, spaces included. Optional. |
Two slots, three meanings
Competition waypoints carry a short code (B61130, D01188, A03091) next to a human-readable name. Instruments and task boards key on the code; pilots read the name. Both must survive a round trip.
CompeGPS and $FormatGEO have a natural home for each: the identifier column takes the code, the trailing free text takes the name. OziExplorer does not — like GPX and KML, it has only two text slots, name and description. The convention comp tools settled on:
| Slot | Carries |
|---|---|
| Name / identifier | The code |
| Description / comment | The full name |
Recovering the split on import
Promote the primary slot to a code when it looks like one — and the test has to be tight enough not to eat ordinary short names. A competition code is 2–8 alphanumeric characters containing at least one digit:
/^(?=[A-Za-z0-9]*\d)[A-Za-z0-9]{2,8}$/
The digit requirement is what makes it safe. Without it, Goal, Home and Top all become codes and their real names vanish into a field nothing displays.
The promotion applies only when the secondary slot is non-empty and different from the primary. A waypoint with a code-looking name and no description is just a waypoint with a terse name — leave it alone.
Every field, all three dialects
Search by field or meaning, or narrow to one dialect. Fields marked shared behave the same way everywhere.
Paste a file, read the waypoints
The dialect is sniffed from the content, then every line is decoded. Coordinates are converted to signed decimal degrees and elevations to metres. Nothing is uploaded.
Where waypoint files go wrong
- Ozi altitudes are feet. The other two dialects are metres. Convert, and honour
-777/-9999as "unknown" rather than as a depth. - The degree sign is unreliable. Match around it, not on it.
- Encoding is Windows-1252 as often as UTF-8. Accented place names are single high bytes; strict UTF-8 decoding turns them into replacement characters. Try UTF-8 first, fall back to Windows-1252.
- Ozi has no quoting. A comma in a name is unrepresentable. Replace it on export; do not emit a quoted field that no Ozi reader understands.
$FormatUTMis a different coordinate system, not a variation. Refuse it with a message that says so.- Line endings are CRLF in files from the original tools. Split on
/\r?\n/, write CRLF back. - Skip unparseable lines, don't fail the file. Headers, comments, blank lines and the occasional truncated row are all normal. Only an empty result is an error.
- Validate coordinates. A mis-sniffed dialect happily produces latitude 4400 or longitude 574. Bound-check every point before you keep it.
What We-Fly reads and writes
The XC planner's waypoint collections import and export all three dialects. Everything is parsed in the browser — an imported collection is only stored when you explicitly save it.
| Dialect | Import | Export | Written as |
|---|---|---|---|
| OziExplorer | ✓ | ✓ | .wpt |
| CompeGPS geographic | ✓ (.wpt or .utm) | ✓ | .wpt |
FS $FormatGEO | ✓ | ✓ | .wpt |
$FormatUTM | refused | — | — |
All three export back to .wpt — the extension carries no information, so the dialect is the pilot's choice at download time. Competition codes survive a full import → save → export round trip in every dialect, including through the two-slot Ozi form.
The same collections also round-trip through GPX, KML and SeeYou .cup.