Skip to content
barcoder

Standards/geo-uri

geo URI

TypeQR Data Format
Completeness78%high

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 is wgs84 — 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 (an https:// URL) binds the user to one provider and can carry place names, search terms and routing parameters that the bare geo: scheme does not [3].
  • Altitude and uncertainty are first-class in geo: (,alt and ;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
source · docs/standards/geo-uri/index.md