How to get Mean-Sea-Level heights from GPS and a Geoid Model
Why use a Geoid Model?
GPS receivers measure 3D positions relative to an Ellipsoid (Latitude, Longitude and Ellipsoidal Height h). Ellipsoidal Heights do not take into consideration the Earth’s gravity and are not compatible with mean-sea-level (MSL) Heights. MSL Height H (also called Orthometric Heights) can be obtained by subtracting the Geoid Height N from the GPS Ellipsoidal Height h. Geoid Height N is positive (+) when the geoid is above the ellipsoid and negative (-) when it’s below.

The 3 Heights
NRCan’s GPS-Hv2.1 program can determine accurate Geoid Heights for any location in Canada (by interpolation from a Geoid Model). GPS-Hv2.1 is available as a free online application or as free downloadable standalone PC software. The Geoid Model provided with the software is the HTv2.0 Height Transformation. The standalone PC version can use other geoid models as well (available from GSD Information Services by special request).
GPS-H v2.1 online
- allows manual single point entry only
- currently applies only the HTv2.0 Height Transformation
Enter Latitude, longitude, Ellipsoid Height and select the Reference System (ITRF/WGS84 or NAD83)

Online GPS-H 2.1 Input Screen
Online GPS-H v2.1 Output
GPS-H v2.1 standalone PC version
The GPS-Hv2.1 standalone PC version can be downloaded for free from the CSRS Database
- It uses by default the HTv2.0 Height Transformation but can use any geoid model (.byn or .bin files)
- It allows manual single point entry and file submission (in GHOST 04, Free, Geolab or FILLNET formats). Click the Help button for a description of these formats.

PC version GPS-H v2.1
Example: the height of the Geoid (using the HTv2.0 Height Transformation) in Ottawa (approx. coordinates 45-24-04 N, 75-42-17 W) is -32.9 m relative to the NAD83 reference system (GRS80 Ellipsoid) and -34.0 m relative to the WGS84 reference system (WGS84 Ellipsoid). A negative Geoid Height value means the geoid is below the ellipsoid. At this location, the geocentric WGS84 ellipsoid is 1.1 m above the near-geocentric NAD83 (CSRS) GRS80 ellipsoid.
Location of the HTv2.0 Geoid and WGS84 and NAD83 reference Ellipsoids in Ottawa
How can I get Mean-Sea-Level heights from GPS and a Geoid Model
Most real time GPS users prefer using Mean Sea Level (MSL) heights. To make this possible GPS receivers have an on-board table of geoid heights that unfortunately, due to receiver storage limitations, is very sparse (10 degree spacing) and can be erroneous by several metres. Geoid height from this table is applied in real-time to the GPS’s ellipsoidal heights to display (poor quality) MSL heights.
All GPS receivers can output real-time GPS positions in the (industry standard) NMEA format which can be logged or used as input to GPS/GIS software. The $GPGGA string is particularly useful as it contains the most useful, comprehensive position data.

The NMEA $GPGGA string
Note that the $GPGGA string contains the MSL Height H and a WGS84 Geoid Height N (from the internal table) but not the original Ellipsoidal Height h computed by the GPS. Regardless of the accuracy of N, the accurate original Ellipsoidal Height h can always be recovered by doing (h = H + N) and it will always be in the same datum as the Lat/Long coordinates.
Most GIS software (such as ArcPad) automatically recover the original Ellipsoidal Height h in this manner. Most will let you manually enter one accurate Geoid Height value N (which can be obtained from GPS-H) or use the actual Geoid Model. Either way an accurate MSL Heights H can then be produced in real time (H = h - N). Generally-speaking if the work area is small the geoid height can be considered constant throughout and entering a single value will suffice.
What’s my datum?
The NMEA data contains no field to reliably indicate the datum of the coordinates so it’s very important to know your GPS receiver’s native datum which will depend on the GPS equipment and the methodology used.
All GPS receivers operate by default in WGS84. For users who prefer to operate in a local datum most receivers contain an internal table of datum shift values (from WGS84 to a selection of local datums). If you set the Datum to WGS84 you are ensured that no datum shift is being applied and your receiver will output coordinates in its native datum. Your native datum will depend on the technique used.
-
When using “Uncorrected GPS” and “WAAS corrections”, the native datum is WGS84.
The “WGS84 to NAD83” datum shift option in most receivers should not be used as it actually applies a zero-shift, leaving you in fact still in WGS84. Leave the GPS datum set to WGS84.
Some higher-end GPS receiver do contain a valid “WGS84 to NAD83” 7-parameter transformation which can be used, verify with your manufacturer. -
When using “Coast Guard Beacon” or “CDGPS” corrections, the native datum becomes NAD83(CSRS).
This is great for working in NAD83 directly especially if you are using a fully-integrated GPS system (correctly applying a valid “WGS84 to NAD83” 7-parameter transformation). Such a system can be set to always output the datum of your choice (even if the correction is intermittent).
It can be problematic if you are using a non-integrated GPS system (GPS with separate Beacon or CDGPS radio) and corrections are intermittent. For these systems always leave the GPS datum set to WGS84. The “native datum” will be NAD83(CSRS) when the correction is being applied, but will switch back to WGS84 when the correction is lost. Unfortunately most GPS /GIS software would not notice this datum shift. - When doing RTK, the datum of the rover positions is the same as that of the base station.
Which geoid model should I use?
The Geoid Model to use will depend on a few factors
-
Do you wish to produce heights in the CGVD28 datum (to conform with published benchmark elevations)?
The quick/easy way is to apply the Height Transformation (HTv2.0). HTv2.0 is basically the CGG2000 scientific geoid model aligned so its "zero" is the same as that of CGVD28 and distorted slightly to fit the published CGVD28 benchmark elevations (which contain known distortions of up to 20cm). You will instantly be in CGVD28. -
Do you wish to produce the most accurate MSL heights for proper water management?
It would be best to use the latest Canadian scientific geoid model. Currently it is the CGG2010 (Canadian Gravimetric Geoid 2010). CGG2010 does not have the distortions of HTv2 and best represents the direction of flow of water.
Note that MSL heights produced using CGG2010 are not directly compatible with CGVD28. CGG2010’s “zero” is global MSL. CGVD28’s “zero” is a national MSL which was defined by sea level observations at Canadian tide gauge sites.
To make your CGG2010 heights conform with CGVD28, you can apply a bias for the vertical datum difference. In fact every Geoid model will produce a slightly different geoid height for a given location.
Example: In Ottawa (approx. coordinates 45-24-04 N, 75-42-17 W), relative to the NAD83 Ellipsoid:
- the HTv2.0 Geoid height (compatible with CGVD28) is -32.903 m
- the CGG2010 Geoid height is -32.537 m
- the CGG2005 Geoid height is -32.608 m
- the CGG2000 Geoid height is -32.477 m
- the GSD95 Geoid height is -32.401 m
- the GSD91 Geoid Height is -32.014 m

Various geoid models (not to scale)
How can I make my CGG2010 heights conform with the published elevation of a specific benchmark(or tide gauge)?
You must observe with GPS at the benchmark/tide gauge to determine its Ellipsoidal Height h. Apply the CGG2010 geoid height N to get Orthometric Height H (H = h - N). Compute the difference between H and the published elevation and apply this as the vertical bias to all your CGG2010 heights.
How can I get the latest scientific Geoid model CGG2010?
The CGG2010 geoid model (as well as previous geoid models) can be downloaded here for free. Note that currently only the PC version of GPS-H can use these geoid model files, the Online version uses HTv2.0 only.