When I went to New York city for a business trip, I was testing my Android application that has GPS settings on it to see how accurate it was. The results that I got, was completely inaccurate. If I was in one building on the side of the street, the GPS would show that my device is on the opposite end of the street, in another building. I've tested on my iPhone just to make sure that it wasn't my application causing this, and to my surprise, it wasn't. Both devices showed me at the wrong location.
Is there a reason for this? The only reason I could think of is that the GPS satellite signals get messed up around tall buildings.
Is there a possible way to fix it? I'm guessing there is because of so many GPS applications for urban travel. How did they go about fixing it? I am genuinely curious.
Thank you so much.
New York is one of the cities with so called "Urban Canyons".
They have high buildings shielding the view to the sky, such that few satellites are visible, often not enough remain in view.
Second these building reflect the GPS signal which slightly delay the receiving, fooling the GPS chip, which then gives a wrong position.
if you compare applications make sure they all run in the same phone, and they record the locations at the same time.
How did they go about fixing it?
There is no fix for the urban canyon problem, besides using a better device.
Update:
Some GPS receivers, today, even used in smart phones, are "combined receivers".
They combine the US GPS System with (e.g) the Russian GLONASS, giving roughly the double number of visible satellites.
This approach significantly improves the accuracy within cities.
Related
how can I correctly identify if the user is driving or not ? I am trying to make an app where I can find my parked car's location.
The simplest way was to ask user to press a button after parking the car so that my app can remember its location.
But I want my app to be automatic. It should correctly recognize if the user is in vehicle or not without interacting with the user.
I tried out Activity Recognition as well but it does not give me exact/correct result. Even when I am walking it says driving and vice versa. I cannot trust it.
There are several apps in the play store which achieve this. I want to learn this as well.
Would some one take some time and help me out on this. It will be of greate help. Thanks a lot in advance :)
I've never done this before, but here are some things I'd try:
location - mainly, how fast their location is changing. probably not great for slow traffic, but if they are moving 60mph, there's no way they are walking. You could also combine this with map data about known roads, or maybe even use locations of well-known airports to know that someone is more likely flying than driving
use the device's accelerometers to compute it's speed (in conjunction with location info to correct for accumulated error).
have the user connect their device to the car with bluetooth - and then when the connection drops, you know they aren't in their car. Or better yet, figure out if you can just detect they are in the car from strength of the bluetooth signal. Though I'm not sure that's possible.
(maybe) ask your users to use a simple RFID chip in their car, and then use that as an indicator of whether or not the phone is in the car. Of course this has implications on the user experience.
in a different vein, maybe some sensor on the device could pick up vibrations? Just thinking that car rides aren't perfectly smooth, so any vibration sensing + some signal processing (DFT the data, then look for certain low frequencies that correspond to driving - probably low frequency and below audible).
The best? Probably a combination of all of the above. The more signals you can gather, the better. Perhaps you could even collect a bunch of data, and try to use it to train a classifier? Then again, if any one of these signals turns out to be strong enough, you might not need the others. Be sure to test a variety of scenarios, e.g. phone in the cup holder v. in your pocket, city driving & slow traffic v. highway driving / empty streets, etc.
I'd be curious to know if any of these ideas pan out.
Also fwiw, Determining if user is driving using gps appears relevant - though it's a simple speed-based check - if you cruise around a parking lot at 8mph looking for a spot, you'll completely fail at catching where the car is parked if your threshold is 10mph.
If the speed drops from above 40km/h to under 7km/h, and stays low for more than 5 minutes.
I have been developing location tracking apps and testing them mostly on my HTC G1 running Android 1.6. I find that there are certain time intervals -- of approximately 1-2 hours -- when the recorded GPS locations become very erratic: I end up with what looks like a random distribution of points around my actual location, but instead of being clustered tightly within a 10-50 meter circle as they normally are (I use a minimum accuracy for recording these locations), they are spread out with a radius of something like 1-5 km -- even though each of these locations comes in with a reported accuracy of under 50 meters.
It's as if the actual location accuracy balloons during these periods but the reported accuracy remains the same. This is relatively infrequent and when it occurs it lasts only for a few hours, after which everything appears normal again. Because it is so infrequent, and because I am usually also in the process of tinkering with the app, I am having a hard time ruling out the possibility that this is caused by a bug in my code.
Has anyone else experienced this? Are there known hardware or firmware issues that could be causing it? If so, does anyone have a good way of detecting the problem when it is occurring and correcting the reported accuracy values? I assume one option would be to rely on the NMEA sentences, but I would like to be able to run the app on Android API level 4 and I see that GpsStatus.NmeaListener requires 5 or above.
I would really appreciate any suggestions.
1-5km deviance should never happen in GPS receivers.
If that happens then it looks like an alternate location service is active, like cell tower location, and wifi location.
If you want a precise position you should filter out all non GPS ones.
GPS positions can be detected that they have a speed and heading (bearing) assigned when the device moves. (I am not sure if the check for an altitude helps)
The line patterns comes from the situation when a new GPS sattelite comes into the view, and other(s) are going ou of view. The new situation can be worse from the geometric sattelite constellation. This new constellation can also called so called Multi-Path Effects (Reflections of the GPS Signal at the opposite building)
And I hope that you don't do you measurements indoors, (where GPS does not work reliably)
I'm new in Android and I would like to ask you is there any possible way to know if the Android phone moved about 5 meters from its current location ?
One idea is to use the accelerometer to detect when the phone is moving. Naturally, you can't estimate the distance moved very accurately, but it might work for your application. If the accelerometer says the phone is moving for more than 5 seconds or so (maybe you can detect a pattern of movement?) you might infer that the phone moved significantly from its original position.
Of course, the user can trick your app by shaking the phone...
A good resource concerning GPS can be found at the official site: http://www.gps.gov/systems/gps/performance/accuracy/
The short answer, however, is that the GPS accuracy of a specific phone at a given moment is dependent upon several variables. Those that are most pertinent to your question would be the actual hardware of the device, and the environmental conditions at present. Typically, a phone under good conditions can expect at best 10m of lateral accuracy. Taking into account poor conditions, local interference, limited satellite connectivity, etc, can push the error of a reading much higher. Unfortunately, consistently and precisely measuring a movement of 5m is unlikely.
After doing some asking around and reading, it sounds like you're lucky to get even within 10 meters of accuracy with a GPS on a mobile device (specifically Android).
I've seen a video that shows a home-made device reading out to several decimals. Is this only because of the data format from the chip? (aka, not really precise either?)
Is there any real working way that I can use an Android device to track real static positions within rooms in a building?
Ideally, I'd be able to mark a point in a room and come back to it later with virtually no drift.
The LocationProvider is different from each Android Device you are using. The SDK does not handle the calculation of your exact location but the phone does. But each device can have one or mare LocationProvider, thats why you need to set some Criterias when your picking a LocationProvider.
To get your exact position on the earth the GPS needs 3 points from 3 different satellites. Thats why the GPS works best in the open space. Regarding making a precise calculation on a static persion inside a building, this conflict with the whole scenario of the GPS-System. I'm not saying it's impossible to get a location inside a building but as with any other signals, obstacles that blocks the signal makes is weaker.
If you are inside a barn with thin walls this might work, but inside a 10 storage building your scenario seems quite impossible.
You can though force your phone to get the best LocationProvider and hopefully that will give you the most precise location. And yes, you can get inside 1-2m in precision outside.
I hope this helps a little. Enjoy your project.
I'm writing a toy car-navigation app for Android, mostly to learn the Android SDK.
While testing my application, it worked fine for a few hours. Then, suddenly, it reported my position as being in a town 100km south of my real position, travelling at 300km/h. I was in fact travelling at approximately 120km/h.
I changed application to Google Maps, and it also showed the same erroneous position and approximate velocity. Since I was driving a car in dense traffic at high speed, for safety, I decided not to start fiddling with the phone any more, and just put it away. The next time I took it up (maybe 15 minutes later), the position and velocity was correct again.
I will add diagnostics to my program to show the reported accuracy of the GPS-fix.
I have a few questions:
Is this a hardware/firmware problem in android phones? (I have a HTC Hero)
Is this a known failure mode of GPS-receivers?
What could make the GPS-receiver report such inaccurate positions?
I had another GPS receiver in the car (a Garmin car navigator). Could this receiver have interferred with the HTC Hero unit?
Handheld GPS devices are much less accurate than is typically claimed, but being off by 100 km (or by whatever the distance is between Bolton and Madrid) is pretty spectacularly unusual. It sounds like something weird may have briefly happened to the GPS system.
The other GPS receiver in your car would not have caused this - the device antenna just receives signals, it doesn't broadcast anything.
Update: might be solar flares. The article laughably claims they'll produce errors in the range of 30 meters; it's laughable because GPS devices are less accurate than that under normal conditions.
Due to the nature of GPS and satellite locking, it just sounds to me like you dropped below the required number, and fell back to some other method, cell-tower-based method of guessing location...
In DC I see this sometimes when traveling on the train due to the fact that the GPS is loosing signal when I go into the tunnels and the "tower" based location kicks in.
The only thing I can think of is to do some sort of geo-distance reasoning about your position... but what you would do once you knew you had bad geo data I don't know. :-)