File Formats


APPS expects observation files to be in Receiver Independent Exchange Format (RINEX). Both RINEX version 2 and RINEX version 3 files are allowed.

Hatanka Compression

APPS also allows observation files to be compressed using Hatanka compression. Maximal compression of RINEX files would first involve running them through rnx2crx and then compressing them with your favorite ASCII compression algorithm.

Submitting Files

Files can be submitted to APPS through the web interface, or through the webservice, either directly or through the python library. When processing in Kinematic mode, you will want to upload an attitude quaternion file defining the attitude of your platform. When modeling atmospheric pressure, you can either supply your own pressure file or let APPS use NCEP data for you. Suffice to say, depending on your processing mode and options you might be uploading several files to APPS. Each interface provides mechanisms to submit these files individually, but you may also archive up and compress all those files into a single file and upload that amalgamation. APPS will automagically determine which file is which.

General Compression

APPS allows and encourages users to compress the files they upload. Currently APPS supports the following compression modes:


APPS also understands archives and compressed archives of files. The archive formats APPS currently supports are:

Pressure File

This is a unique feature designed to enhance the accuracy of the position estimates, especially in Kinematic mode. It is most powerful in improving positioning accuracy for airplanes because it helps decorrelate the estimates of the vertical position and the wet zenith delay.

APPS offers the user an option to upload pressure measurements, which are converted internally to hydrostatic delay values and used in the modeling of the tropospheric delay. If the user opts not to upload pressure measurements, APPS will model the hydrostatic delay based on the altitude of the receiver, using the model: 1.013 * 2.27 * exp(-.000116 * h) meters, where h is the station height above the ellipsoid in meters. Any errors in this model are usually fully absorbed by the estimated wet zenith delay and total delay gradients that are estimated as random walk processes every measurement epoch.

For airplane/helicopter positioning, which is much more sensitive to errors in the modeled hydrostatic delay, APPS automatically extracts pressure data from weather fields obtained in near-real-time from the National Center for Environmental Prediction (NCEP). Currently these fields cover the continental U.S., Alaska, and Hawaii. These objective analysis press ure fields are interpolated to the computed flight path. The derived pressure is typically accurate to better than 10 mbar (roughly equivalent to 2 cm of zenith delay).

User-provided pressure measurements must have the following format: UTC_Time(yyyy:mm:dd:hh:mm:ss.ssss) Pressure(mbar)

No spaces are allowed within a field. Arbitrary number of spaces can separate the two fields. No headers or comments are allowed. Partial time format is allowed (as long as it contains no spaces (for example, 2007:7:19:17:0 is ok). For example:

2007:07:19:17:32:8.0  931.59
2007:07:19:17:32:10.000     931.59
2007:07:19:17:32:15.0000  931.590
2007:7:19:17:32:20.0000  931.6
2007:7:19:17:32:25.0000  931.59
2007:07:19:17:32:30.0000  931.59
2007:07:19:17:32:35.0000  931.60
2007:07:19:17:32:40.0000  931.60
2007:07:19:17:32:45.0000  931.60
2007:07:19:17:32:50.0000  931.60


If pressure measurements are provided by the user, only the RINEX records within the span of the pressure data will be processed.

Attitude Quaternion File

This describes the quaternions file format, containing attitude quaternions as a time series.

The ASCII file contains an arbitrary number of lines with white space delimited fields. Suggested file extension is ‘.quat’.

Any line starting with a “#” is ignored and considered a comment. # E.g. This is a comment line.

Comments may also occur at the end of lines, from the first occurrence of a “#” character onwards.

Data in GipsyX quaternion files must be strictly ordered in time. That is, records for all objects at a particular time must be contiguous; within a “time-block” objects can be in any order, although it will be natural to sort first by time, and then by name. A GipsyX pos_goa file containing quaternions can be trivially converted to a dedicated quaternions file under e.g. *NIX using something like the following (depending on your version of awk):

awk '{ sep="";
       for(i=1; i<=4; i++){printf("%s%s",sep,$i); sep=OFS};
       printf("\n")}' <my.pos> > <my.quat>

IMPORTANT NOTE: in this document, we refer to an epoch we call J2000GPS:

  • J2000GPS is distinct from the epoch J2000.0, which the IAU 1994 Resolution C7 recommends be defined at the geocenter and at the date 2000 January 1.5 Terrestrial Time(TT), where TT = TDT.

  • J2000GPS is also distinct from the date 2000 January 1.5 UTC time, which we can refer to as J2000UTC. Exactly 13 leap seconds separate these epochs, i.e.: J2000GPS = J2000UTC - 13 = 2000-01-01 11:59:47.000 UTC

  • Times before and after J2000GPS are described in GPS seconds around this epoch, i.e. continuous time.

For example:

E GPS23 403261200 0.000000000000000E+00 4.213090921042242E-02 1.449777480113355E-01 7.188055942732944E-01 -6.786198911851030E-01


Fields 0-7 are REQUIRED.




E or I for Earth-Fixed or Inertial respectively. Note that nothing inherently limits this to a single character in order to allow for more descriptive or exact coordinate systems.


Name of object (satellite, station, ??? ); white-space is not allowed in the name.


Integer (t_i) seconds past J2000GPS. To get GPS seconds past GPS week 0 second 0, ( 6-JAN-1980 00:00:00.0000), add 630763200; we assume this is a signed int in C++.


Float seconds (t_f) past t_i, double for C++.


Unit attitude quaternion, scalar component


Unit attitude quaternion vector, i component


Unit attitude quaternion vector, j component


Unit attitude quaternion vector, k component

All lines with the same name, field 1, must be time ordered.

Time past J2000GPS = t_i + t_f. This time representation can have femto-second accuracy for 68 years from J2000GPS (2**31/86400/365 ~= 68.09, i.e. good for 68 years to 1 second from J2000GPS). If you do not need this precision, you could of course set t_i = 0 and write t_f as double seconds past J2000GPS, as it currently is in many software sets.

If q0 + q1i + q2j + q3k is any quaternion (Q), then q0 is called its scalar part and q1i + q2j + q3k is called its vector part. This quaternion should transform a vector in the satellite body-fixed coordinate system (Vbfs) to a vector in the coordinate system identified in field 0 (Vs):

Vs = R.Vbfs

R is a rotation matrix derived from Q.