I’ve been interested in location services for mobile devices ever since I owned my first phone. I wrote my first location-aware apps on the HP iPAQ H555 (with an external Navman GPS antenna) and the Motorola i860, the first device to support the standardized Java Location API.
There have been many changes in the industry since these devices, but one consistent limitation of building apps for consumer-level phones has been the computation of location information in a “black box”. In other words, a mobile app can read the location calculated by the underlying hardware via an Application Programming Interface (API) but it cannot read any of the raw data (e.g., pseudoranges) from Global Navigation Satellite Systems (GNSS) used to determine that location.
This changed with the launch of Android Nougat 7.0, which brought the ability to collect and process raw pseudorange measurements and navigation messages within an Android app. Android Pie 9.0 went further by providing developer options for testing real-time kinematic (RTK), or carrier-phase measurements.
Having raw GNSS data available on handsets is amazing, but it takes a lot of software, and in some cases expertise, to process it. As a result, it can take a lot of effort to build a relatively simple app that computes a location from raw data.
As I’ve worked on my own open-source GNSS testing app for Android (GPSTest), I’ve run across other open-source apps that process GNSS data and are a great educational resource. But, often they are hidden in GitHub repositories and largely unknown to the world.
To make these awesome open-source GNSS apps easier to find, I’ve decided to start cataloging them in a list called — you guessed it — awesome-gnss:
I hope this list makes it easier for software developers to discover open-source software, tools, and resources that speed up location-aware app development.
But what about…
I’d like to keep the list focused on open-source solutions, but there may be some exceptions for excellent tools that aren’t open-source but are free to use. If you’re not sure about something, open an issue to discuss it!