Sunday, 3 August 2014

On the smartphone GPS accuracy


 As i started playing around Android programming, as soon I got the grip on the basic, I had go deep into "localization". So I had read a lot of manual pages, web pages and post about it. My first step was to create a class which allow me to select the best location provider, in several study case. So my mainly choice parameter were the requested accuracy, the  status of the battery, and if I get the passive data then the age of the Location Object.
Two fact drawing my attention: the passive provider, and the improve of precision of coordinates when the wi-fi was turned on. So I have investigate how it was work, and I found several blog article or post [2], which explain how it work, and support it by example on how happen when people relocate  without changes ("relocate") theirs  their's wi-fi hot spot: a catastrophic lack in accuracy of the Location.
However in the last days I have had some spare time so I have tried to better understand the accuracy of the smart phone devices. First of all I have detected a point with fixed coordinate (in order to compare with Location data). Then I have use my old Localization class to write an App which write into a file all the parameters stored into a Location class.

Before to jump into the data analysis, I would recollect some basics term.
A devices can have several location providers (A-GPS, GPS, Network,  Cell-ID), each of this providers can output a location. In the  Android OS a Location [3] is a class with several methods and fields. For the analysis   I will consider the following parameters that, accordingly to my opinion are the most important:
  • Accuracy (double): which is only about horizontal value, and is a length, which represent a circle within we have the 0.68 probability to be inside.
  • Latitude (double).
  • Longitude (double).
  • Altitude (double).
  • Time (long), the UCT time of the fix.
  • Bundle (android.os.Bundle), which is specific information and depends on the provider.
My App
I have written a simple application that updates and collects the location data for every available provider, every 5 seconds for 30 times. I have used an instance of the class java.util.Timer and have extended the class java.util.TimerTask. For every Location I have extract the fields I have described before and wrote them down in a .csv file.


Statistical Analisys
After I had collected the data, I had to find a point with known  coordinates, then with all my devices I collected the information for that point.
To simplify the analyses I will not use the accuracy and I'll consider the collected data as a single measure (a perfect shot!). However I will use the known point coordinates and from all the sample values I will evaluate the accuarcy with a Circular Error Probability (CERP)  set to 0.68 and 0.95. To perform all the statistical analysis I'll use R [4].



References

  1. http://blog.shinetech.com/2011/10/14/a-good-look-at-android-location-data/
  2.  http://android.stackexchange.com/questions/44608/google-maps-location-history-is-showing-an-incorrect-location
  3.  http://developer.android.com/reference/android/location/Location.html 
  4.  http://www.r-project.org/
  5.  

No comments:

Post a Comment