I have a location listener in my android app which will request for updates with an interval of 5 seconds and 10 meters in distance:
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000,10);
I get notified via the onLocationChanged() method of my listener as expected. However what is weird is I noticed when I’m at home the coordinates that are retrieved are from about half a block away. This is pretty consistent. And yes, I have GPS on. If I open Google Maps I notice that it will initially show my location where my app reports the coordinates, but within several seconds will move to my actual location.
Is google maps applying some kind of GPS fix to the coordinates or something? Do I need to do something more complicated than simply listen for updates. I haven’t done this before so it’s all pretty new to me..
Also note that I have Endomondo which tracks where you run and it seems to get really accurate results just fine as well.. For instance I started it up, walked out front and down the street about half a block and came back and it plotted it perfectly. Is there something I need to do to get more accurate reporting?
Yes, Google Maps relies on more than just your GPS to determine your actual location. To be precise, Google relies on radio multilateration amongst cellular phone antennas (CellID) and amongst wi-fi access point antennas (see: locationManager.NETWORK_PROVIDER).
Using these auxiliary sources of information, Google can determine your position even inside a building, where your GPS cannot work reliably, and in outdoor situations where, for a reason or another, the GPS cannot be of any help (in New York, for example, the “canyon effect” created by the skyscrapers keeps GPSs from working).
And, yes: there is more to take into account than just reading the location updates.
You should read the Android Location Manager documentation, in particolar the section devoted to location providers and location strategies, to learn more about Google location features. See also: Location and Maps.