W3C Geolocation API

Javascript API to geolocate devices

Geolocation APIFirst published| 22 December 2008; 16 years ago (2008-12-22)[1][2]

|

Latest version| W3C Recommendation
1 September 2022; 2 years ago (2022-09-01)[3]
Organization|

* W3C
* Google

Committee| Geolocation Working Group[3]
Editors| Andrei Popescu[3]
Domain| Geographical location information
Website| www.w3.org/TR/geolocation-API/

The W3C Geolocation API is an effort by the World Wide Web Consortium (W3C) to standardize an interface to retrieve the geographical location information for a client-side device.[3] It defines a set of objects, ECMAScript standard compliant, that executing in the client application give the client's device location through the consulting of Location Information Servers, which are transparent for the application programming interface (API). The most common sources of location information are IP address, Wi-Fi and Bluetooth MAC address, radio-frequency identification (RFID), Wi-Fi connection location, or device Global Positioning System (GPS) and GSM/CDMA cell IDs. The location is returned with a given accuracy depending on the best location information source available.

The result of W3C Geolocation API will usually give 4 location properties, including latitude and longitude (coordinates), altitude (height), and accuracy [of the position gathered], which all depend on the location sources.[citation needed]

## Deployment in web browsers

[edit]

Web pages can use the Geolocation API directly if the web browser implements it. Historically, some browsers could gain support via the Google Gears plugin, but this was discontinued in 2010 and the server-side API it depended on stopped responding in 2012.[4][5]

The Geolocation API is ideally suited to web applications for mobile devices such as smartphones. On desktop computers, the W3C Geolocation API works in Firefox since version 3.5, Google Chrome,[6] Opera 10.6,[7] Internet Explorer 9.0,[8] and Safari 5. On mobile devices, it works on Android (firmware 2.0+), iOS, Windows Phone and Maemo. The W3C Geolocation API is also supported by Opera Mobile 10.1 – available for Android and Symbian devices (S60 generations 3 & 5) since 24 November 2010.[9] Browsers initially allowed access to the API in insecure contexts, but in the context of Secure Contexts,[10] browsers, e.g., Chrome,[11] now generally require a secure connection.

Google Gears provided geolocation support for older and non-compliant browsers, including Internet Explorer 7.0+ as a Gears plugin, and Google Chrome which implemented Gears natively. It also supported geolocation on mobile devices as a plugin for the Android browser (pre version 2.0) and Opera Mobile for Windows Mobile. However, the Google Gears Geolocation API is incompatible with the W3C Geolocation API and is no longer supported.

## Location sources

[edit]

This section does not cite any sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (January 2022) (Learn how and when to remove this message)

|

The Geolocation API does not provide the location information. The location information is obtained by a device (such as a smartphone, PC or modem), which is then served by the API to be brought in browser. Usually geolocation will try to determine a device's position using one of these several methods.

GPS (Global Positioning System)
This happens for any device which has GPS capabilities. A smartphone with GPS capabilities and set to high accuracy mode will be likely to obtain the location data from this. GPS calculate location information from the satellite signal. It has the highest accuracy; in most Android smartphones, the accuracy can be up to 10 metres.
Mobile Network Location
Mobile phone tracking is used if a cellphone or wireless modem is used without a GPS chip built in.
Wi-Fi Positioning System
If Wi-Fi is used indoors, a Wi-Fi positioning system is the likeliest source. Some Wi-Fi spots have location services capabilities.
IP Address Location
Location is detected based on the nearest public IP address on a device (which can be a computer, the router it is connected to, or the Internet Service Provider (ISP) the router uses). The location depends on the IP information available, but in many cases where the IP is hidden behind an ISP network address translation, the accuracy is only to the level of a city, region or even country.

## Implementation

[edit]

Though the implementation is not specified, W3C Geolocation API is built on extant technologies, and is heavily influenced by Google Gears Geolocation API. Example: Firefox's Geolocation implementation[12] uses Google's network location provider.[5] Google Gears Geolocation works by sending a set of parameters that could give a hint as to where the user's physical location is to a network location provider server, which is by default the one provided by Google (code.l.google.com).[13] Some of the parameters are lists of sensed mobile cell towers and Wi-Fi networks, all with sensed signal strengths. These parameters are encapsulated into a JavaScript Object Notation (JSON) message and sent to the network location provider via HTTP POST. Based on these parameters, the network location provider can calculate the location. Common uses for this location information include enforcing access controls, localizing and customizing content, analyzing traffic, contextual advertising and preventing identity theft.[14]

### Example code

[edit]

Simple JavaScript code that checks if the browser has the Geolocation API implemented and then uses it to get the current position of the device. this code creates a function which can be called on HTML using `<body onload="geoFindMe()">`:

const geoFindMe = () => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, error, geoOptions);
} else {
console.log("Geolocation services are not supported by your web browser.");

const success = (position) => {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const altitude = position.coords.altitude;
const accuracy = position.coords.accuracy;
console.log(`lat: ${latitude} long: ${longitude}`);

const error = (error) => {
console.log(`Unable to retrieve your location due to ${error.code}: ${error.message}`);

const geoOptions = {
enableHighAccuracy: true,
maximumAge: 30000,
timeout: 27000

## See also

[edit]

* Local search (Internet)
* Location-based service

## References

[edit]

1. ^ "Geolocation API Specification 2nd Edition Publication History - W3C". n.d. Retrieved 21 April 2021.
2. ^ Popescu, Andrei (22 December 2008). "Geolocation API Specification". W3C. Geolocation Working Group. Retrieved 21 April 2021.
3. ^ a b c d Cáceres, Marcos; Grant, Reilly (1 September 2022). "Geolocation API Specification". W3C. Geolocation Working Group. Retrieved 8 February 2024.
4. ^ "Geolocation API: Gears API: Google Code". Google Code. 9 July 2009. Archived from the original on 14 February 2012. Retrieved 21 April 2021.
5. ^ a b "GeolocationAPI - gears - Provides the geolocation of a device running a Gears-enabled web browser. - Improving Your Web Browser - Google Project Hosting". Google Code. n.d. Archived from the original on 22 December 2015. Retrieved 21 April 2021.
6. ^ "A new Chrome stable release: Welcome, Mac and Linux!". Google Chrome Blog. 25 May 2010. Retrieved 21 April 2021.
7. ^ Kleinhout, Huib (1 July 2021). "Opera 10.60 goes final". My Opera. Opera Software. Archived from the original on 9 November 2011. Retrieved 21 April 2021.
8. ^ ieblog (17 February 2011). "W3C Geolocation API in IE9 - IEBlog - Site Home - MSDN Blogs". IEBlog. Archived from the original on 19 February 2011. Retrieved 21 April 2021.
9. ^ Opera.com (25 November 2010). "Opera speeds up Symbian browsing". Archived from the original on 4 November 2011. Retrieved 21 April 2021.
10. ^ "Secure Contexts". W3.org. Retrieved 13 October 2022.
11. ^ "Intent to Remove: Insecure origin usage of geolocation". Groups.Google.com. Retrieved 13 October 2022.
12. ^ "Does Firefox share my location with websites? | Mozilla Support". Mozilla Firefox. Mozilla. n.d. Retrieved 21 April 2021.
13. ^ "WebScanNotes.com: W3C Geolocation API". WebScanNotes. n.d. Archived from the original on 12 November 2012. Retrieved 21 April 2021.
14. ^ King, Kevin F. (8 June 2010). "Personal Jurisdiction, Internet Commerce, and Privacy: The Pervasive Legal Consequences of Modern Geolocation Technologies" (published 9 June 2010). SSRN 1622411. Retrieved 21 April 2021.

## External links

[edit]

* W3C Geolocation API Specification

* v
* t
* e

World Wide Web Consortium (W3C)

Products,
standards|

| Recommendations|

* ActivityPub
* Activity Streams
* ARIA
* Canonical XML
* CDF
* CSS
* Animations
* Flexbox
* Grid
* DOM
* EXI
* EmotionML
* Geolocation API
* HTML
* HTML5
* IndexedDB
* ITS
* JSON-LD
* Linked Data Notifications
* MathML
* Micropub
* OWL
* PLS
* RDF
* Schema
* RDFa
* SISR
* SKOS
* SMIL
* SOAP
* SRGS
* SRI
* SSML
* SVG
* Filter Effects
* SCXML
* SHACL
* SPARQL
* Timed text
* VoiceXML
* WebAssembly
* WoT
* TD
* Web storage
* WSDL
* Webmention
* WebSub
* WebVTT
* WOFF
* XHTML
* +RDFa
* XML
* Base
* Encryption
* Events
* Information Set
* Namespace
* Schema
* Signature
* XForms
* XInclude
* XLink
* XOP
* XPath
* 2.0
* 3.x
* XPointer
* XProc
* XQuery
* XSL
* XSL-FO
* XSLT
* elements

|

Notes|

* IndieAuth
* XAdES
* XBL
* XHTML+SMIL
* XUP

Working drafts|

* CCXML
* CURIE
* EME
* InkML
* MSE
* RIF
* SMIL Timesheets
* sXBL
* WebGPU
* WebXR
* XFDL
* XFrames
* XMLHttpRequest

Guidelines|

* Web Content Accessibility Guidelines

Initiative|

* Markup Validation Service
* Web Accessibility Initiative
* Web Components

Deprecated|

* C-HTML
* HDML
* JSSS
* PGML
* VML
* WebPlatform

Obsoleted|

* P3P
* XHTML+MathML+SVG

Groups,
organizations|

* WHATWG
* Defunct: World Wide Web Foundation

Elected|

* AB
* Board
* TAG

Working|

* CSS
* SVG
* WebAssembly
* WebAuthn

Community, business|

* Web Advertising BG
* WebAssembly CG

Closed|

* Device Description (DDWG)
* HTML
* Multimodal Interaction Activity (MMI)

Software|

* CERN httpd
* Libwww

Browsers|

* Line Mode (1990–)
* Arena (1993–98)
* Agora (1994–97)
* Argo (1994–97)
* Amaya (browser/editor, 1996–2012)

Conferences|

* International World Wide Web Conference (IW3C)
* Steering Committee (IW3C2)
* First conference ("WWW1", 1994)

* v
* t
* e

Web interfaces

Server-side

Protocols|

* HTTP
* v2
* v3
* Encryption
* WebDAV
* CGI
* SCGI
* FCGI
* AJP
* WSRP
* WebSocket

Server APIs|

* C NSAPI
* C ASAPI
* C ISAPI
* COM ASP
* Jakarta Servlet
* container
* CLI OWIN
* ASP.NET Handler
* Python WSGI
* Python ASGI
* Ruby Rack
* JavaScript JSGI
* Perl PSGI
* Portlet
* container

Apache modules|

* mod_include
* mod_jk
* mod_lisp
* mod_mono
* mod_parrot
* mod_perl
* mod_php
* mod_proxy
* mod_python
* mod_wsgi
* mod_ruby
* Phusion Passenger

Topics|

* Web service vs. Web resource
* WOA vs. ROA
* Open API
* Webhook
* Application server
* comparison
* Scripting

Client-side

Browser APIs|

* C NPAPI
* LiveConnect
* XPConnect
* C NPRuntime
* C PPAPI
* NaCl
* ActiveX
* BHO
* XBAP

Web APIs|

| WHATWG|

* Audio
* Canvas
* DOM
* SSE
* Video
* WebSockets
* Web messaging
* Web storage
* Web worker
* XMLHttpRequest

|

W3C|

* DOM events
* EME
* File
* Geolocation
* IndexedDB
* MSE
* SVG
* WebAssembly
* WebAuthn
* WebGPU
* WebRTC
* WebXR

Khronos|

* WebCL
* WebGL

Others|

* Gears
* Web SQL Database (formerly W3C)
* WebUSB

Topics|

* Ajax and Remote scripting vs. DHTML
* Browser extension
* Cross-site scripting and CORS
* Hydration
* Mashup
* Persistent data
* Web IDL
* Scripting

Related topics

* Frontend and backend
* Microservices
* REST
* GraphQL
* Push technology
* Solution stack
* Web page
* Static
* Dynamic
* Web standards
* Web API security
* Web application
* Rich
* Single-page
* Progressive
* Web framework

*[W3C]: World Wide Web Consortium
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template