Standards/geo-uri
geo URI
Overview
The geo URI is a URI scheme that identifies a physical point on Earth by its coordinates, written geo:48.2010,16.3695,183 for latitude, longitude and (optional) altitude [3]. Encoded inside a standard qr-code symbol, a geo URI lets a phone open the location directly in a mapping application after a scan [1].
The scheme is standardized by the IETF as RFC 5870, "A Uniform Resource Identifier for Geographic Locations," published in June 2010 by Alexander Mayrhofer and Christian Spanring [3]. ZXing documents geo: as one of the geographic-information formats it decodes from QR codes [1].
History
RFC 5870 was published in June 2010 to give geographic points a stable, application-independent URI representation, much as mailto: and tel: do for email and phone numbers [3]. ZXing adopted the same geo:lat,lon,alt form (also accepting an altitude component) as its convention for location QR codes [1].
Technical specification
RFC 5870 defines the scheme with the following ABNF [3]:
geo-URI = geo-scheme ":" geo-path
geo-path = coordinates p
coordinates = coord-a "," coord-b [ "," coord-c ]
p = [ crsp ] [ uncp ] *parameter
crsp = ";crs=" crslabel
uncp = ";u=" uval
For the default coordinate reference system the components are [3]:
latitude = [ "-" ] 1*2DIGIT [ "." 1*DIGIT ]
longitude = [ "-" ] 1*3DIGIT [ "." 1*DIGIT ]
altitude = [ "-" ] 1*DIGIT [ "." 1*DIGIT ]
So the first coordinate is latitude, the second longitude, and the optional third altitude (in meters). If altitude is unknown, both the value and the preceding comma MUST be omitted [3].
Parameters:
crs=selects the coordinate reference system; the default iswgs84— the World Geodetic System 1984, equivalent to EPSG 4326 (2-D) and 4979 (3-D) [3].u=gives the uncertainty of the location as a value in meters [3].
Examples from the RFC [3]:
geo:48.2010,16.3695,183
geo:48.198634,16.371648;crs=wgs84;u=40
ZXing's documented example is geo:40.71872,-73.98905,100 (latitude, longitude, altitude) [1].
Use cases
- Map pins in print. A geo URI QR on a flyer, signpost, real-estate listing or event poster opens the exact spot in the scanner's map app — useful where a street address is ambiguous or absent [1].
- Camera-native location handoff. A scanned
geo:URI is handed to the OS, which routes it to the default mapping application [1]. - Precision and uncertainty. The
u=parameter lets the encoder communicate how accurate the fix is, and the altitude component captures vertical position where relevant [3].
Implementations
| Project | Lang | Stars | Last active | Notes |
|---|---|---|---|---|
| zxing/zxing | Java | ~34k | 2025 | Reference decoder; parses geo: payloads into a geographic result [1] [5] |
| Android intent system | — | — | 2025 | A geo: URI is a registered Android intent that opens the default maps app |
Comparison
- geo URI vs map deep-links. A
geo:URI is vendor-neutral: it carries only coordinates (optionally CRS and uncertainty) and lets the OS pick a map app, whereas a Google Maps or Apple Maps deep-link (anhttps://URL) binds the user to one provider and can carry place names, search terms and routing parameters that the baregeo:scheme does not [3]. - Altitude and uncertainty are first-class in
geo:(,altand;u=), which most map deep-links do not expose as cleanly [3].
Fun facts
- All three example coordinates in RFC 5870 point to Vienna, Austria — the home base of co-author Alexander Mayrhofer [3].
Status
Active. RFC 5870 is the current IETF standard for geographic-point URIs, and geo: is a recognized location format in both ZXing and OS-level intent handling, opening scanned points directly in a mapping application [1] [3].
Sources
1 Barcode Contents — ZXing Wiki 3 RFC 5870: The 'geo' URI Scheme — IETF, 2010 5 zxing/zxing — ZXing project, GitHub
Deployments
No country reports mention this standard by name.
Regions / aggregations not mapped to a single country
- Universal