# geo URI

> Source: https://docs.barcoder.ai/docs/standards/geo-uri
> research date 2026-06-03 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [RFC 5870 — A Uniform Resource Identifier for Geographic Locations ('geo' URI)](https://datatracker.ietf.org/doc/html/rfc5870)
- [Barcode Contents — ZXing Wiki](https://github.com/zxing/zxing/wiki/Barcode-Contents)

## 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 <sup>[3][3]</sup>. Encoded inside a standard [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) symbol, a geo URI lets a phone open the location directly in a mapping application after a scan <sup>[1][1]</sup>.

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 <sup>[3][3]</sup>. ZXing documents `geo:` as one of the geographic-information formats it decodes from QR codes <sup>[1][1]</sup>.

## 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 <sup>[3][3]</sup>. ZXing adopted the same `geo:lat,lon,alt` form (also accepting an altitude component) as its convention for location QR codes <sup>[1][1]</sup>.

## Technical specification

RFC 5870 defines the scheme with the following ABNF <sup>[3][3]</sup>:

```
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 <sup>[3][3]</sup>:

```
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** <sup>[3][3]</sup>.

**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) <sup>[3][3]</sup>.
- `u=` gives the **uncertainty** of the location as a value in meters <sup>[3][3]</sup>.

Examples from the RFC <sup>[3][3]</sup>:

```
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) <sup>[1][1]</sup>.

## 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 <sup>[1][1]</sup>.
- **Camera-native location handoff.** A scanned `geo:` URI is handed to the OS, which routes it to the default mapping application <sup>[1][1]</sup>.
- **Precision and uncertainty.** The `u=` parameter lets the encoder communicate how accurate the fix is, and the altitude component captures vertical position where relevant <sup>[3][3]</sup>.

## Implementations

| Project | Lang | Stars | Last active | Notes |
|---|---|---|---|---|
| [zxing/zxing](https://github.com/zxing/zxing) | Java | ~34k | 2025 | Reference decoder; parses `geo:` payloads into a geographic result <sup>[1][1]</sup> <sup>[5][5]</sup> |
| 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 <sup>[3][3]</sup>.
- **Altitude and uncertainty** are first-class in `geo:` (`,alt` and `;u=`), which most map deep-links do not expose as cleanly <sup>[3][3]</sup>.

## Fun facts

- All three example coordinates in RFC 5870 point to Vienna, Austria — the home base of co-author Alexander Mayrhofer <sup>[3][3]</sup>.

## 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 <sup>[1][1]</sup> <sup>[3][3]</sup>.

## Sources

[1]: https://github.com/zxing/zxing/wiki/Barcode-Contents
[3]: https://datatracker.ietf.org/doc/html/rfc5870
[5]: https://github.com/zxing/zxing

[1] [Barcode Contents](https://github.com/zxing/zxing/wiki/Barcode-Contents) — ZXing Wiki
[3] [RFC 5870: The 'geo' URI Scheme](https://datatracker.ietf.org/doc/html/rfc5870) — IETF, 2010
[5] [zxing/zxing](https://github.com/zxing/zxing) — ZXing project, GitHub

## Deployments

_No country reports mention this standard by name._

## Regions / aggregations not mapped to a single country

- Universal
