How, exactly does HTML5's GeoLocation work? - google-maps

I know the browser shares my IP address and details of nearby wireless networks to determine my location, but what sort of info does it know about nearby wifi networks?
For example, where I live are no public wireless networks, and from my home I can see about 5 private networks, yet my location is determined within 20 meters. With there being no open networks nearby, how does Google determine my location? The only way I can think of is that Google mapped the locations of all wireless networks when they mapped streets for Street View.
I've searched about online, but all I can't find any specific details.

The data sent by Firefox to Google is for all visible access points, public or private. For each access point detected, it sends the following data to https://www.google.com/loc/json:
"mac_address": "01-23-45-67-89-ab",
"signal_strength": 8,
"age": 0,
"SSID": "MyAccessPoint"
where
mac_address is the mac address of the WiFi node.
signal_strength is current signal strength measured in dBm.
age is the number of milliseconds since the WiFi node was detected.
SSID is the name or ESSID of the WiFi node.
The georeferenced WiFi data used to geocode your request was collected when Google was driving around taking pictures for StreetView.
It is important to note that, however, that this is how the HTML5 geolocation API is implmeneted on Firefox using Google's Geolocation Services. This is an implementation, not a specification. If your device has a built-in GPS, it is probably desirable that your HTML5 implementation queries the GPS directly, rather than using a geolocation service.
Even firefox implements this feature differently on Windows and Linux. Using a current Firefox on Windows, details of all visible WiFi nodes are sent to Google. Using a current Firefox on Linux, only details of the currently connected WiFi node is sent, due to the reliance on libiw for access point data.
As another answerer noted, Safari uses Skyhook Wireless's service which does much the same thing as Google's Location Services.

Data is gathered by Skyhook Wireless (Wikipedia), and they make no distinction between public and private wifi points - they log the locations of all of them. I wouldn't be surprised if the Google Street View vans also logged location data for access points.

Related

Geolocation API and GIS Data

I am working to develop a web app that can utilize a GNSS receiver connected to a smart device to plot points of interest and display them on a map. I am trying to capture the enhanced location data that is being provided via the GNSS receiver. Connecting a GNSS receiver to an android phone or tablet, you have to enable mock locations on the device. The web app works while the GNSS unit is not connected, but once it connects, Chrome is unable to load any location at all, using either getcurrentposition() or watchposition(). The team I am working with thinks the browser might not recognize the units the GPS device is measuring (degrees minutes seconds as opposed to decimal degrees), but I am not so sure this is the case. The Google maps app works while a device is connected to the GPS unit, but maps.google.com does not, which makes me think this is a browser issue. I've also found other apps from the app store that are able to take readings from the device's mock locations. Not being able to use the improved accuracy of the GNSS unit limits the app to the GPS information the phone/tablet provides. Any thoughts about how I could make this work?

How does google map location works?

My question is how does google map or mobile GPS able to find mine current location ?
My high level understanding after reading this article is , GPS receiver gets the location coordinates through these satellites
and this location is further passed to Google Map(or any other client) API which then locates the exact location on map. Is it correct ?
Somewhere i also read that Mobile towers also plays the role. But my unserstanding is that this can be used to track the mobile location if required but mobile apps or Google maps
uses the satellite approach. Right ?
It's a bit inaccurate question to ask "How does google map location works", because Google Maps app (as well as any application leveraging google maps API) is just a consumer of location services on your device and is not used to determine the current location itself.
Because Google Maps is just an application, it can be run inside browser, or as native application. Depending on that, the way how it gets to your location information may also vary.
If you run the Google Maps from web browser (or WebView, or UIWebView,..) it usually uses HTML 5 geolocation API to determine your location and then use that to show your position on Google Maps. HTML5 geolocation then uses some lower level services to get your location, like GPS sensor, WIFI, network etc. There are already questions on how HTML 5 geolocation determines your position on SO, like this one or this one.
If your app is run as standalone application, it depends on your platform, your device sensors, your network,.. how the location is determined. So for example on Android with GPS sensor, LocationManager is used, which retrieves the location again using GPS, or from network provider, or returns last known location, etc. There's a lot of various interesting techniques behind this, which you can look up yourself (For example to determine your location using Wifi, Google has a database of WIFI SSIDs and their locations retrieved using anonymous device tracking and is able to roughly tell your location only from Wifi networks around you.)

How does the HTML5 Geolocation API work?

I am wondering how the HTML5 Geolocation API works. What I need to know is, the obtained latitude and longitude belongs to whom? Is it the location of the ISP, as I think there is no GPS device attached to my PC or the laptop? Also if it is obtained from the SSID of the WiFi device? Does the WiFi device know it's coordinates?
From the W3C Geolocation API Specification (emphasis mine):
The Geolocation API defines a high-level interface to location information associated only with the device hosting the implementation, such as latitude and longitude. The API itself is agnostic of the underlying location information sources. Common sources of location information include Global Positioning System (GPS) and location inferred from network signals such as IP address, RFID, WiFi and Bluetooth MAC addresses, and GSM/CDMA cell IDs, as well as user input. No guarantee is given that the API returns the device's actual location.
Your browser will use the hardware provided to it by "the device hosting the implementation," but neither consistency nor accuracy are guaranteed.

HTML5 Geolocation API to Obtain WiFi AC Information?

I am trying to create an application in HTML5 that attempts to determine a list of Wifi access points in range of the user's device. I've done some research and discovered that Google's geolocation API sends a
"computer’s IP address and a collection of information of [its]
surrounding Wi-Fi access points to their default location service
provider (e.g., Google Location Services..."
I have yet to find, however, any resources that look into if the possibility of obtaining information such as SSID, MAC address, etc for a developer using the API. Is this possible, and if so, could you redirect me to another source or explain how to retrieve them? Even the documentation for the API does not specify how to retrieve the information that Google uses to determine geolocation. Any help is appreciated. Thank you.
Article for above quote
As far as I know, there is no public API to retrieve the SSID, MAC address in HTML5. It is being implemented inside the browser to pass it to the location service provider.
You can only get the information unless you wrote your own native application.

Blackberry Users See Usage Exceeded Image

I have a web page that displays the users location on a small Google map
e.g.
Google Static Map
However my colleagues who have blackberrys seem to get the usage limit exceeded image all the time:
Some of these are work blackberry users and some are personal devices. So is google using the BES address as the source? Surely all blackberry users must have this problem if that was the case?
There are two aspects to understand here. One is that the Google static maps API is rate limited based on IP addresses. This is intended to spread out the usage limits. The docs for maps say the limit is "25 000 free static map requests per application per day."
If you aren't using an API key, that limit applies per IP address.
The second thing to understand is that BlackBerry devices all access the internet through a VPN that is tunneled through the mobile operator's data plan. This is what BIS service provides, along with email access. When a BIS user browses the internet, their IP address will come from one of RIM's datacenters, and not from the mobile operator's datacenter. There is one datacenter for all of North America. RIM publishes their IP addresses. This means all BlackBerries with BIS service will show up from a limited set of IP addresses.
Combining these two pieces of knowledge together, we have an API whose limits are based on IP addresses, and a large set of devices that use a limited set of IP addresses. This is why BlackBerry devices run out of Google Maps API quota, even if another non-BlackBerry device using the same mobile operator does not see the quota issue.