Technical Details

The core of the technique used by this service is the HTML5 Geolocation API. The main method is in the JavaScript below

    function doGeolocation() {      
        if (navigator.geolocation) {            
                {timeout:10000, enableHighAccuracy:true});      
        } else {            

This technique is so simple, almost anyone can do it.


Quoting from the specification:

The accuracy attribute denotes the accuracy level of the latitude and longitude coordinates. It is specified in meters and must be supported by all implementations. The value of the accuracy attribute must be a non-negative real number.
The accuracy … values returned by an implementation should correspond to a 95% confidence level.

Each time the page is re-loaded the API will request a new, non cached “lock”, or location. If the GPS is on, most systems will activate it to get the location.


Location Databases

There are ways to get a location other than a GPS. Google, for instance, has an enormous database of the unique identifiers of residential and commercial wireless access points (WAP)s. If a mobile phone or laptop is within range of one of the WAPs in the database, the Chrome implementation of the HTML5 Geolocation API appears to use this in determining the location. This works quite well for laptops that do not have GPS, and mobile phones with GPS turned off.

Network Location

Additionally, if the device is a phone, it location can be determined by the cellular provider’s network infrastructure. This is known as the rough, or network location. This location is what 911 operators have access to when you call for help.

Unfortunately, the network location is based on triangulation of the signals from the cell towers that the device is registered on. In the wilderness, where the device may only be able to recieve from a single cell tower, or a group of them in one direction, this triangulation method fails, and usually results in a position with an error of 1000m or more.

Hybrid Location

When the JavaScript requests the location via the GeoLocation API, it’s asking the device for the best location it can give. If the device has recently accessed the GPS, it may have cached the information, so it will return that immediately.

However, if the device has not accessed the GPS for a long time, that location is considered “stale”. In this case it will request another new position from the GPS, but will need to calculate that new position. Solving for a new position can take some time.

In cases like this sometimes the device returns an estimate based on the last position, the network location, or the database location. This can have more error than a GPS position.

Updating requests

Because the initial “solution” to asking the GPS for an updated position can be lower accuracy, our system will ask the GPS to update several times over the period of a minute or so, and also gives the device owner the ability to request an update by hitting a button on the tracking page.

Sometimes, for reasons documented in the limitations section, a device is unable to deliver a position, even after multiple requests.