Measuring GNSS accuracy on Android devices

Remember the Simpsons episode where Homer can’t find his Uber because of poor GNSS accuracy?

What is “estimated accuracy”?

When users want to find out more about GNSS on their device, they download utility apps such as GPSTest by barbeauDev (full disclosure, this is my open-source app), GPS Test by Chartcross Limited (yes, the similar names are confusing), or GPS Status & Toolbox by EclipSim.

Popular GNSS utility apps GPSTest (left), GPS Test (center), and GPS Status & Toolbox (right) all show “accuracy” or “error” values
“Estimated horizontal accuracy” is radius of the transparent circle you see in Google Maps
A visual definition of “estimated horizontal accuracy”
  1. The estimated accuracy (thick black line) isn’t equal to true accuracy (red dashed lines)
  2. By design, about 32% of the time the true accuracy (error) is greater than the estimated accuracy — in other words, the device is underestimating the error

A better way to measure accuracy

So how do we determine the true accuracy, or error, of GNSS in an Android device?

The new “Accuracy” feature in GPSTest compares your real position against GNSS-calculated position
A graph is included for both horizontal and vertical error, including estimated accuracy values

Tips, tricks, and caveats

Here are some things to keep in mind when using the “Accuracy” feature of GPSTest:

  • Don’t move during the test — your device should remain completely stationary during static accuracy tests for optimal results (See this paper for a methodology for “dynamic” accuracy when the device is moving — maybe a future feature in GPSTest?)
  • Choose your ground truth location carefully — There can be errors in aerial imagery that affect results if you choose your location by tapping on the map. Ideally, you’d go to a surveyed location marker and manually enter the latitude and longitude for that marker (converting to the WGS84 datum first if needed). If you’re in the U.S., see the National Geodetic Survey Survey Marks and Datasheets page for more details on finding a survey marker near you.
  • Altitude must be entered in meters above the WGS84 ellipsoid, NOT meters above mean sea level. Here is a good article describing the difference between these values. See this issue for more details.
  • Horizontal error is measured using the Android Location.distanceTo() function. If you look at the Android source code, this function uses the Vincenty Inverse Formula to calculate the distance between two points (observed and ground truth locations) on the surface of the WGS84 ellipsoid. Vertical error is the simple difference between the observed and ground truth altitude values, and can be positive or negative.
  • “Estimated vertical accuracy” is only available on Android 8.0 and higher. The exact definition is available in the Location.getVerticalAccuracyMeters() documentation.
A survey marker used to precisely identify a location (Source: Wikipedia)


Don’t trust the estimated accuracy value you see in GNSS apps. If you’re not entering your ground truth location into an app, you’re seeing estimated accuracy, not actual accuracy.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Sean Barbeau

Sean Barbeau

Improving the world, one byte at a time. @sjbarbeau,, I work @CUTRUSF. Posts are my own.