Why do we call everything a GPS location? - android

At the moment I'am working on a application that is using the location of a phone. Before I started with building my application I did some research about how the phone location is working.
The conclusion is that a mobile phone can talk to a GNSS satellite and then determine the location of the device (in real life there is much more technology behind this, but I will leave that aside for the sake of simplicity). However, I noticed that when we talk about Geographic locations, many people talk about a GPS location. But why is it called a GPS location? Because during my research I also read that the latest phones are now equipped with a multi-GNSS system that allows them to talk to different GNSS systems and use all this data together to determine a location even more accurately. However, this means that not only the GPS data is used, but also data from GLONASS.
So why is it always called a GPS location? Or is my theory wrong?
I already did some research about this topic on the internet but I cant find any information about this topic.

Because the average person doesn't care about details. GPS was the first major positioning satellite system you could use to get location. So people called it the GPS location. When other systems came up, people kept using the old name because they were used to it, and because they weren't technical enough to care about the difference. THat's why you still tape TV shows when recording digitally, all acetompinophine is called "Asprin", the save button is still a floppy disk, and my mother still calls any video game system "playing Nintendo". If you're talking to professionals in the field where the different satellite systems matter, they'll use more specific terminology. Everyone else will still say "GPS".

Related

Android Fused Location provider gets lost

I've been testing android's new Location API's for a few weeks. In general they work quite well, however, the new Location provider frequently loses the plot.
Specifically, I wire up an example based on the receive location updates example. It works correctly, and the location updates are received as expected.
The problem seems to be with the Fused provider itself. In some areas (notably around my home) it completely gets lost. It will suddenly think I am kilometers away from where I am. Around where I work (which is a more built up area) it is much more accurate and always reasonably close to where I actually am (in Balanced mode).
I have made many attempts to fix this, including switching to PRIORITY_HIGH_ACCURACY when I suspect it is in error, or using the older LocationManager to try get a GPS fix to establish where I really am. But nothing seems to help too much. I suspect Google has bad data on where certain mobile towers of WiFi hotspots are around my home, and when it connects to certain towers is suddenly jumps a few km from the true location. It's very annoying and will interfere with the Geofence API also. Any advice on how I can fix this?
Can you just ignore the location updates that are inaccurate? This code was released at Google IO 2013 I think, so it might still have some bugs.
(I am experiencing the same thing as you. Rural area, the Fused Location provider is giving me locations all over the place)
There is bad data about some WIFI APs from time to time, and these tend to fix themselves after a while. A clue to what's happening to you can be found in the accuracy returned. If when it goes to the wrong place, the accuracy is a large number (hundreds of meters), that implies the fused location provider is using a cell location. It may mean there aren't a lot of APs where you live, and that you can only get a wifi location once in a while (or once in a while you can't get a wifi location). The FLP should get better at avoiding these jumps over time as algorithms improve.
If the bad location you get has a small accuracy (around 30 meters), that implies it's a wifi location, and bad AP database information probably explains the issue.

android GPS calibration

When moving a big distance, like to another city, with the GPS off, it takes very much time for it, when turned on, to get the first correct point.
So if by example I register to the gps provider, it could take up to 10 min until the first onLocationChanged call.
The network provider will respond faster, but is less accurate.
Is there a way to help the gps provider? To give it an approximate location (the one from the network provider), so it can find my location faster?
I think that google maps made some kind of optimisation, because their app finds my location faster than my basic app, that only register to the gps provider.
Any idea how I could accelerate the process of obtaining my location with decent accuracy ( <30 m) ?
You are right that if you move a long way with the phone switched off, then it can take a long time to get a satellite fix. This is where AGPS helps. The 'A' stands for 'assisted' which is very much carrier and handset dependent in its implementation. In essence it gets an approximate location from cell towers or from public WiFi like coffee shops and then downloads ephemeris and almanac data which tell the phone which satellites are likely to be overhead at that time in that rough location. The phone can then start listening on the frequencies corresponding to the visible satellites first. This should speed up the time to first fix.
Common practice is to use WiFi SSIDs or the location of the cell tower you're registered with to look up your current location via providers like WeFi or Skyhook. Google uses its own service for that (and sees that no one else does).
Another method would be, in case your smartphone has a barometer, to look up the air pressure and try to pin it down to a location. While all these methods can theoretically be used offline, it is easier to fetch the data from the internet.
Also note that inaccurate NTP settings on the phones may lead to longer GPS search times.
Is there a way to help the gps provider?
NickT has answered this, but the android phone has to call the AGPS. In your app you cannot controll that.
I think that google maps made some kind of optimisation, because their
app finds my location faster than my basic app, that only register to
the gps provider.
This should not be the case, probaly you are doing something wrong, or the google app can enable assisted GPS. Try to compare with other android GPS apps (e.g compare with Motion-X-GPS)
it could take up to 10 min until the first onLocationChanged call.
Normally this is far too long, either your phone is known to have a weak GPS quality, or the device did not have free view to open sky. Even without assisted GPS, after 45 seconds, you should have a valid GPS position (asuming free view to open sky).
But this situation can happen, either the first time you use GPS on your device, or when you fly by airplane to a location far away to your last GPS position.
On my iphone i rarly saw such a situation when another GPS app was somehow disturbing, after a reboot of the device the GPS was immedeatly valid.
Again check if it is the fault of your app, by comparing if other apps needs 10 minutes too. (It could be your fault, when you wait to recieve an accuracy <30m while other apps would take the first valid position they get.
If google needs 10 minutes, too, then you could do nothing on that phone, except to expose it to good view to sky.
(Inside an urban canyon it's more difficult to obtain a valid first fix, then on an big place.)

Plotting many Wifi Access Points from Android to mySQL database

I have a few questions regarding an app I needed to develop for my final year project.
Its for an indoor building btw. :D
1) I need to gain access to a constantly changing latitude/longitude using a wifi access points. How do i exactly achieve that using an Android device? For example, my device is connected to one Wifi connection, then it will display a lat/long once requested by user. The thing is, once the user move and request another lat/long location, the coordinates must change too, depending on how far the device from the wifi original source.
2) Then after achieving that, every single lat/long location request made by the user can be saved to a mysql database, directly from the device, so that it can be displayed later on as a location only, without the lat/long coordinate. the user can save the lat/long while adding a Wifi name and location name
3) I guess those 2 are the hardest ones, so the final step would be to view all saved locations only.
Thank you.
N.B. This "answer" is really more of a (long) comment.
I need to gain access to a constantly changing latitude/longitude using a wifi access points. How do i exactly achieve that using an Android device?
This is potentially a bit too broad for SO: perhaps you'll get better answers over at Computer Science.
Wikipedia has articles on indoor positioning and, more specifically, wifi positioning which may form a good starting point for further research.
However, I would immediately observe that received signal strength (as used by Skyhook Wireless) will be a very poor locator indoors due to the presence of obstructions (such as walls); time of arrival might be a better choice, but requires additional hardware—the most ready-to-go approach would be GPS repeating, but sadly the use of such systems are unlawful within the EU.
I suspect your only practical choice may be GSM positioning, but accuracy from cell towers will be pretty poor: you could instead consider femtocell positioning.
Then after achieving that, every single lat/long location request made by the user can be saved to a mysql database, directly from the device, so that it can be displayed later on as a location only, without the lat/long coordinate. the user can save the lat/long while adding a Wifi name and location name
This is certainly more on-topic, but I don't see an actual question here. With which part of this are you stuck? What is it that you want to know?
There are already plenty of questions on SO discussing how to access a MySQL database from an Android device: the most common approach is to go via a webservice, but you could connect to the RDBMS directly if your threat model allows.
I guess those 2 are the hardest ones, so the final step would be to view all saved locations only.
Likewise, I don't see an actual question here. With which part of this are you stuck? What is it that you want to know?

Location within a building using the wifi hotspot

I am trying to build an android application which changes the alert profile of the phone according to the location. I am using Google maps to get the location of the user. But this gives me the location only up to the granularity of a building.
For example, Google map might tell that I am in my office building, but not whether I am in a meeting room or the pantry. And I might want different profiles for the two places.
Assuming the building has a separate wireless router in each room, I plan to use the wifi hot spot to get the precise location.
Will this be possible? Is there a service/app already existing for this?
Any other ideas to achieve this are also welcome.
That's an active research topic that has no real solution yet. You might be able to get information about signal strength of close hotspots (don't know of there is an API in Android for that) or at least the BSSID of your current hotspot (there is an API for that AFAIK) and decide based on that where you are.
If there was a great solution to do that Google would have probably done that already (they have to a limited extend: http://googlemobile.blogspot.de/2011/11/go-indoors-with-google-maps-60-for.html)

Use Android GPS to detect and connect with other phones

So I asked something similar yesterday and did receive an answer to my question, however I don't really think I asked it correctly and therefore didn't receive the exact information I needed.
I'm in search of an API, some open source code, or even just a way that someone else has achieved this on the Android. I'm making an app that needs to find all other Android devices within a specified radius. For example, when you open your Android Google Maps App, and you search for say "Restaurants [ZipCode]", it uses a radius modified from your zip code and finds all of those places. The GPS gets YOUR location, and maps uses that information to find restaurants within an address close to that passed in location.
Instead, I want to be able to use the GPS to find my location (as it can now easily), but instead of finding things on a map (which is already built in), I want to be able to find other GPS enabled Android phones. I get that they will have to be broadcasting their GPS signal at the same time as well (since they don't have their data stored with some sort of central database as a restaurant would). However, I don't just want to FIND these phones, I want to send/receive data from these phones (with correct permissions obviously).
Now, I've found things like the Bump API. However, BUMP uses the phones sensors to spark this search. So basically, if you "bump" your phone with another and have the app running, it will THEN go ahead and use GPS to find the location of the other phone you just bumped with and exchange data between them. This is like EXACTLY what I want to do however in their API, they do not provide the functionality to just say, "Hey, give me all phones within a mile from me."
I've also found API's that can do exactly what I need but they have to be on the same Bluetooth range or on the same Wi-Fi network, which doesn't suit what I need at all.
Do you guys know of anything that can fit exactly what I need that already exists? Or a way to maybe modify Bump API (if you've done it), to not have to use the phone sensors and find phone information directly through GPS for phones around you? Or is there something that exists over a 3g/4g network instead of only wi-fi/Bluetooth?
Thanks guys.
Instead of frequently posting locations to an external server, couldn't the GPS realize other things broadcasting a GPS signal at a very specific time and send/receive data from them?
The only things that are "broadcasting a GPS signal" are satellites.
We would like to accomplish this without the use of an external server.
You have no choice but to use an external server, whether you like it or not, both for discovery and for later communication.
Do you guys know of anything that can fit exactly what I need that already exists?
Foursquare, Google Latitude, Yahoo Fire Eagle, and so on.
To do this via GPS, you would have to have all the phones frequently posting their locations to a network server, which could then inform them of others nearby.
Needless to say this would be opt-in only!
And it may have negative consequences for battery life, unless you make it update infrequently, which may limit its usability.
The advantage of having an explicit trigger action to both phones is that they only need to query the GPS and inform the server to find each other by location when they've both been triggered.
You would probably have to author your own application - then you could do this server-side and push things. If you're trying to push data to random Android phones - you're out of luck. Most people aren't going to want this, and probably aren't going to have the apps necessary to receive and understand it. With Bluetooth networking you'd need authorization, and most Androids don't have a capability to transfer random data by Bluetooth out of the box (though you certainly can get software to do it).
Honestly, malware and tracking are the reasons this really isn't possible, but even if they weren't, you would still need an application on the receiving devices that understand what you're sending them. And if you're widely spread enough, you'd probably want to send it to a server to disseminate anyway (for the transmitting phones bandwidth costs at least).
Develop a server application that your android app logs into. Send the GPS location every time the phone moves over a present distance. Either send a query request to the server to ask it if any other phones are in range, or get the server to inform the phone of a new device in range.
You may run into server scalability problems, so thats something to think about.
Also, this would be a big battery drain, and so your users may not be too keen to run it, not to mention the privacy element.
You need to rethink what you're trying to do. Android devices don't "transmit" any GPS signal, they are simply receivers, with signals from satellites. So the phone can easily get a location for itself, but the location of other devices is very, very private information. To get access to location for other phones, you either need to be on the same network as them (bluetooth, wifi), or you need them to use a server-based service to send locations to, like Google Latitude.
I'd be highly unlikely to sign up to a service like that. My location is very private, I share it with some people, but I cannot seem myself openly sharing it with an app, without a very, very good reason.
It seems to me that you need to build a server-based application, e.g. on Google App Engine, have people sign up, and agree to their location being sent to that server, so other phones running your app can access that information from the central store.
The question now has a very simple solution to it. All you have to do is set up a Geofence and monitor it for entry and exit of users. Geofence allows you to choose a geolocation and set a circle of desired radius around it. When someone enters or exits the location you can get notified and perform desired action.
Visit this link for further details on how to use this in Android.
All the comments from other folks about not being able to pick up the signal from others phones are correct. There is a completely different alternative system however in the network based location services. This is a model where you ask a carrier network for the location of a handset, which the carrier network needs to track for enhanced 911 service in the US (I'm unaware of how widely deployed this is in other areas, and how many different services you would need to use to cover other areas).
It's potentially a very expensive route however. And it won't just automatically work for all handsets, I believe the users will have to be opted into sharing location with your service. This is how services like Loopt had initially setup their location info so that it could be passively collected without negatively impacting handset battery life. There are some third party services that front for a cross-carrier service such as Location Labs:
http://locationlabs.com/
As well as third party location services like Skyhook Wireless, who might be able to get you some info of the sort (though I don't think what you're looking for maps to any of their existing APIs)

Categories

Resources