A Uniform Resource Identifier for Geographic Locations ('geo' URI)
nic.at GmbH
Karlsplatz 1/2/9WienA-1010Austria+43 1 5056416 34alexander.mayrhofer@nic.athttp://geouri.org/30 Hancock StSomerville02144Massachusetts+1 617 863 0360christian@spanring.euhttp://www.spanring.eu/
RAI
GEOPRIV -- Geographic Location/Privacy Working GroupgeographygeoURIschemeThis document specifies a Uniform Resource Identifier (URI)
for geographic locations using the 'geo' scheme name. A 'geo'
URI identifies a physical location in a two- or three-dimensional
coordinate reference system in a compact, simple, human-readable,
and protocol-independent way. The default coordinate reference system
used is WGS-84.
An increasing number of Internet protocols and data formats are
extended by specifications for adding spatial
(geographic) location. In most cases, latitude as well as
longitude of simple points are added as new attributes to existing data structures.
However, all those methods are very specific to a certain data format
or protocol, and don't provide a protocol-independent, compact and
generic way to refer to a physical geographic location.
Location-aware applications and location-based services are fast
emerging on the Internet.
Most web search engines use geographic information, and a vivid
open source mapping community has brought an enormous momentum into
location aware technology.
A wide range of tools and data sets which formerly were
accessible to professionals only have became available to a
wider audience.
The 'geo' URI scheme is another step into that direction and aims
to facilitate, support and standardize the problem of location
identification
in geospatial services and applications. Accessing information about
a particular location or triggering further services
shouldn't be any harder than clicking on a 'mailto:' link
and writing an email straight away.
According to , a Uniform Resource Identifier (URI)
is "a compact sequence of
characters that identifies an abstract or physical resource". The
'geo' URI scheme defined in this document identifies geographic
locations (physical resources) in a coordinate reference system
(CRS), per default the World Geodetic System 1984
(WGS-84). The scheme provides the textual representation of
the location's spatial coordinates in either two or three dimensions
(latitude, longitude, and optionally altitude for the default
CRS of WGS-84). An example of such an 'geo' URI follows:geo:13.4125,103.8667
Such URIs are independent
from a specific protocol, application, or data format, and can be
used in any other protocol or data format that supports
inclusion of arbitrary URIs.For the sake of usability, the definition of the URI scheme
is strictly focused on the simplest, but also most common
representation of a spatial location - a single point in a well
known CRS. The
provision of more complex geometries or locations described by
civic addresses is out of scope of this document.
The optional 'crs' URI parameter
described below may be used by future specifications to
define the use of CRSes other than WGS-84. This is primarily
intended to cope with the case of another CRS replacing WGS-84
as the predominantly used one, rather than allowing the arbitrary
use of thousands of CRSes for the URI (which would clearly affect
interopability). The definition of 'crs' values
beyond the default of "wgs84" is therefore out of scope of
this document.
Note: The choice of WGS-84 as the default CRS
is based on the widespread availability of Global Positioning System
(GPS) devices, which use the WGS-84 reference system. It is anticipated
that such devices will serve as one of the primary data sources
for authoring
'geo' URIs, hence the adoption of the native GPS reference system
for the URI scheme. Also, many other data formats for representing
geographic locations use the WGS-84 reference system, which makes
transposing from and to such data formats less error prone (no
re-projection involved). It is also believed that the burden of
potentially required spatial transformations should be put on
the author rather then the consumer of 'geo' URI instances.
Geographic locations in this document are defined using WGS-84 (World Geodetic System 1984), equivalent to the International Association of Oil & Gas Producers (OGP) Surveying and Positioning Committee EPSG (European Petroleum Survey Group) code 4326 (2 dimensions) and 4979 (3 dimensions). This document does not assign responsibilities for coordinate transformations from and to other Spatial Reference Systems.A 2-dimensional WGS-84 coordinate value is represented here as a comma-delimited latitude/longitude pair, measured in decimal degrees (un-projected). A 3-dimensional WGS-84 coordinate value is represented here by appending a comma-delimited altitude value in meters to such pairs.Latitudes range from -90 to 90 and longitudes range from -180 to 180. Coordinates in the Southern and Western hemispheres as well as altitudes below the WGS-84 reference geoid are signed negative with a leading dash.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
this document are to be interpreted as described in
RFC 2119.
This section contains the fields required for the URI scheme
registration, following the guidelines in section 5.4 of
.
geopermanentThe syntax of the 'geo' URI scheme is specified below in
Augmented Backus-Naur Form (ABNF)
:
geo-URI = geo-scheme ":" geo-path
geo-scheme = "geo"
geo-path = coordinates p
coordinates = coord-a "," coord-b [ "," coord-c ]
coord-a = num
coord-b = num
coord-c = num
p = [ crsp ] [ uncp ] *parameter
crsp = ";crs=" crslabel
crslabel = "wgs84" / labeltext
uncp = ";u=" uval
uval = pnum
parameter = ";" pname [ "=" pvalue ]
pname = labeltext
pvalue = 1*paramchar
paramchar = p-unreserved / unreserved / pct-encoded
labeltext = 1*( alphanum / "-" )
pnum = 1*DIGIT [ "." 1*DIGIT ]
num = [ "-" ] pnum
unreserved = alphanum / mark
mark = "-" / "_" / "." / "!" / "~" / "*" /
"'" / "(" / ")"
pct-encoded = "%" HEXDIG HEXDIG
p-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
alphanum = ALPHA / DIGIT
Both 'crs' and 'u' parameters MUST NOT appear more than
once each.
The 'crs' and 'u' parameters MUST be given before any other
parameters that may be defined in future extensions. The
'crs' parameter MUST be given first if both 'crs' and 'u' are used.
The definition of other parameters, and <crslabel> values beyond the default value of "wgs84" is out of scope of this document. discusses the IANA registration of such additional parameters and values.
In case the URI identifies a location in
the default CRS of WGS-84, the <coordinates> sub-components are further
restricted as follows:
coord-a = latitude
coord-b = longitude
coord-c = altitude
latitude = [ "-" ] 1*2DIGIT [ "." 1*DIGIT ]
longitude = [ "-" ] 1*3DIGIT [ "." 1*DIGIT ]
altitude = [ "-" ] 1*DIGIT [ "." 1*DIGIT ]
Data contained in a 'geo' URI identifies
a physical resource: a spatial location identified by the
geographic coordinates and the CRS encoded in the URI.
The semantics of <coordinates> depends on the
CRS of the URI. The CRS itself is identified by the optional
'crs' parameter. A URI instance uses the default
WGS-84 CRS if the 'crs' parameter is either missing
or contains the value of 'wgs84'.
Other <crslabel> values are currently not defined, but
may be specified by future documents.
Interpretation of coordinates in the wrong CRS produces invalid
location information. Consumers of 'geo' URIs
therefore MUST NOT ignore the 'crs' parameter if given, and
MUST NOT interpret the <coordinates> sub-components
without considering and understanding the 'crs' parameter value.
The following component description refers to the use of
the default CRS (WGS-84) only.
Future documents specifying
other 'crs' parameter values MUST provide similar
descriptions for the <coordinates> sub-components in the
described CRS.
The <latitude>, <longitude> and <altitude>
components as specified in the URI scheme syntax
() are to be used as follows:
<latitude> MUST contain the latitude of
the identified location in decimal degrees
in the reference system WGS-84.
<longitude> MUST contain the longitude of
the identified location in decimal degrees
in the reference system WGS-84.
If present, the OPTIONAL <altitude> MUST contain
the altitude of the identified location in meters in
the reference system WGS-84.
If the altitude of the location is unknown, <altitude>
(and the comma before) MUST NOT be present in the URI. Specifically,
unknown altitude MUST NOT be represented by setting <altitude>
to "0" (or any other arbitrary value).
The <longitude> of coordinate values reflecting the
poles (<latitude> set to -90 or 90 degrees) SHOULD be set to "0",
although consumers of 'geo' URIs MUST
accept such URIs with any longitude value from -180 to 180.
'geo' URIs with longitude values outside the range of -180 to 180
decimal degrees or with latitude values outside the range of
-90 to 90 degrees MUST be considered invalid.
The 'u' ("uncertainty") parameter indicates the amount of
uncertainty in the location as a value in meters. Where a
'geo' URI is used to identify the location of a particular
object, <uval> indicates the uncertainty with which
the identified location of the subject is known.
The 'u' parameter is optional and it can appear only once.
If it is not specified, this indicates that uncertainty
is unknown or unspecified. If the intent is to indicate a
specific point in space, <uval> MAY be set to zero.
Zero uncertainty and absent uncertainty are never the same thing.
The single uncertainty value is applied to all dimensions
given in the URI.Note: The number of digits of the values
in <coordinates> MUST NOT be interpreted
as an indication to uncertainty.Two 'geo' URIs are equal when they use the same CRS,
and <coord-a>, <coord-b>, <coord-c>
and 'u' value are mathematically identical (including
absent <uval> meaning undefined 'u' value).Two URIs use the same CRS if both have the 'crs' parameter
omitted, or both have the same <crslabel>, or
one has the 'crs' parameter omitted while the other URI
specifies the default CRS explicitely with a <crslabel>
value of "wgs84".
For the default CRS of WGS-84, the following definitions
apply in addition:
Where <latitude> of a 'geo' URI is set to either
90 or -90 degrees, <longitude> MUST be ignored
in comparison operations ("poles case"). A <longitude> of 180 degrees
MUST be considered equal to <longitude> of -180
degrees for the purpose of URI comparison ("date line" case).
A URI with undefined (missing) <coord-c> (altitude) value
MUST NOT be considered equal to a URI containing a
<coord-c>,
even if the remaining <coord-a>, <coord-b>, and their 'u' values
are equivalent.
A consumer of a 'geo' URI in the WGS-84 CRS with undefined <altitude> MAY
assume that the URI refers to the respective location on Earth's
physical surface at the given latitude and longitude.
However, as defined above, altitudes are relative to the WGS-84
reference geoid rather than Earth's surface. Hence, an <altitude>
value of 0 MUST NOT be mistaken to refer to "ground elevation".
The <coordinates> path component of the 'geo' URI
(see ) uses a comma (",") as the
delimiter for subcomponents. This delimiter MUST NOT be
percent-encoded.
It is RECOMMENDED that for readability the contents of
<coord-a>, <coord-b> and <coord-c> as well as
<crslabel> and <uval> are never percent-encoded.
Regarding internationalization, the currently specified
components do allow for ASCII characters exclusively,
and therefore don't require internationalization.
Future specifications of
additional parameters might allow the introduction of non-ASCII
values. Such specifications MUST describe internationalization
considerations for those parameters and their values.
As many other URI scheme definitions, the 'geo' URI
provides resource identification independent of
a specific application or protocol. Examples of potential
protocol mappings and use cases can be found in
.
Like other new URI schemes, the 'geo' URI requires
support in client applications. Users of applications which are
not aware of the 'geo' scheme are likely not able to make direct use
of the information in the URI. However, the simple structure of the
'geo' URI would allow even manual dereference by humans.
Clients MUST NOT attempt to dereference 'geo' URIs given in an
CRS that is unknown to the client, because doing so would
produce entirely bogus results.
Authors of 'geo' URIs should carefully check that coordinate
components are set in the right CRS and in
the specified order, since wrong order of those components
(or use of coordinates in a different CRS without transformation)
are commonly observed mistakes producing completely bogus
locations.
The number of digits in the <coordinates> values MUST NOT
be interpreted as an indication to a certain level of
accuracy or uncertainty.
Alexander Mayrhofer <axelm@nic.at>, <http://geouri.org/>Christian Spanring <christian@spanring.eu>The 'geo' URI scheme is registered under the IETF part of the
URI tree. As such, change control is up to the IETF.
RFC XXXX [change to RFC number once assigned]This specification creates a new IANA Registry named "'geo' URI
Parameters Registry" for the <parameter> component of the URI. Parameters for the 'geo' URI and values
for these parameters MUST be registered with IANA to prevent
namespace collisions, and provide interopability.Some parameters accept values that are constrained by a syntax
definition only, while others accept values from a predefined set
only. Some parameters might not accept any values at all ("flag"
type parameters).The registration of values is REQUIRED for parameters
that accept values from a predefined set.The specification of a parameter MUST fully explain the syntax,
intended usage and semantics of the parameter. This ensures
interopability between independent implementations.For parameters that are neither restricted to a set of predefined
values nor of the "flag" type described above, the syntax of
allowed values MUST be described in the specification, for example
by using ABNF.Documents defining new parameters (or new values for
existing parameters) MUST register them with IANA, as explained in
.The 'geo' URI Parameter Registry contains a column named "Value
Restriction" that describes
whether or not a parameter accepts a value, and whether values
are restricted to a predefined set. That column accepts the following
values:
"No value": The parameter does not accept any values, and
is to be used as a "flag" only."Predefined": The parameter does accept values from a
predefined set only, as specified in a RFC or other permanent
and readily available public specification."Constrained": The parameter accepts arbitrary values
that are only constrained by a syntax as specified in
a RFC or other permanent and readily available public
specification. contains the initial contents of the
Registry.Currently, just one operation on a 'geo' URI is defined - location
dereference: In that operation, a client dereferences the URI by
extracting the geographical coordinates from the URI path component
<geo-path>.
Further use of those coordinates (and the uncertainty value from
<uval>) is then up to the application
processing the URI, and might depend on the context of the URI.
An application may then use this location information for various
purposes, for example:
A web browser could use that information to open a
mapping service of the user's choice, and display a map of
the location.A navigational device such as a Global Positioning System (GPS)
receiver could offer the user to start navigation to the location.
Note that the examples and use cases aboves as well as in
the next section are non-normative, and provided for information
only.The following 3-dimensional 'geo' URI example references
to the office location of one of the authors in
Vienna, Austria:
geo:48.2010,16.3695,183A user could type the data extracted from this URI into a
electronic navigation device, or even use it to locate the
identified location on a paper map.
'geo' URIs (like any other URI scheme) could also be embedded
as hyperlinks in web pages. A Hyper Text Markup Language (HTML)
snippet with such a hyperlink could look like:
<p>one of Vienna's popular sights is the
<a href='geo:48.198634,16.371648;crs=wgs84'>Karlskirche</a>.
A web browser could extract the coordinates from the HTML snippet and offer the user various options (based on
configuration, context), for example:
Display a small map thumbnail when the mouse pointer hovers over the link.Switch to a mapping service of the user's choice once the
link is selected.Locate nearby resources, for example by comparing the
'geo' URI with locations extracted from GeoRSS
feeds the user has subscribed to.Convert the coordinates to a format suitable for uploading
to a navigation device.Note that the URI in this example also makes use of the
explicit specification of the CRS by using the 'crs' parameter.
Due to it's short length, a 'geo' URI could easily be encoded
in 2-dimensional barcodes. Such barcodes could be printed on
business cards, flyers, paper maps and subsequently used by mobile
devices, for example as follows:
User identifies such a barcode on a flyer and uses the camera
on his mobile phone to photograph and decode the barcode.The mobile phone dereferences the 'geo' URI, and offers
the user to calculate a navigation route to the identified
location.Using the builtin GPS receiver, the user follows the
navgiation
instructions to reach the location.The Geographic Markup Language (GML) by the Open Geospatial
Consortium (OGC) is a set of XML schemas
to represent geographical features. Since GML is widely accepted,
this document includes instructions on how to transform 'geo' URIs
from and to GML fragments. The instructions in this
section are not normative.
For the following sections, "%lat%", "%lon%", "%alt%" and "%unc%" are
placeholders for latitude, longitude, altitude and uncertainty
values, respectively. The mappings use WGS-84, and are defined in the following sections.
Note: GML fragments in other reference systems could be used as
well if a transformation into "urn:ogc:def:crs:EPSG::4979" or
"urn:ogc:def:crs:EPSG::4326" is defined and applied before the
mapping step. Such transformations are typically not lossless.
GML uses the 'double' type from XML schema, and the mapping
examples assume that numbers in the form of "3.32435e2" in GML
are properly converted to fixed point when placed into the 'geo' URI.
A 2D GML 'Point' is constructed from a 'geo' URI that has two coordinates and an uncertainty ('u') parameter that is absent or zero. A GML point is always converted to a 'geo' URI that has no uncertainty parameter.
Note that a 'geo' URI with an uncertainty value of zero is converted to a GML 'Point', but a GML 'Point' cannot be translated to a 'geo' URI with zero uncertainty.
A 3D GML 'Point' is constructed from a 'geo' URI that has three coordinates and an uncertainty parameter that is absent or zero. A GML point is always converted to a 'geo' URI that has no uncertainty parameter.
A GML 'Circle' is constructed from a 'geo' URI that has two coordinates and an uncertainty parameter that is present and non-zero.
A GML 'sphere' is constructed from a 'geo' URI that has three coordinates and an uncertainty parameter that is present and non-zero.
This document requests assignment of the 'geo' URI scheme
in the IETF part of the URI scheme tree, according to the
guidelines in BCP 115 (RFC 4395).
The definitions required
for the assignment are contained in .
This document creates a new IANA Registry named "'geo' URI
Parameters", according to the information in and the definition in this section.When registering a new 'geo' URI Parameter, the following
information MUST be provided:Name of the Parameter.Whether the Parameter accepts no value ("No value"),
values from a predefined set ("Predefined"),
or values constrained by a syntax only ("Constrained").Reference to the RFC or other permanent and readily
available public specification defining the parameters and
the new values.Unless specific instructions exists for a Parameter (like
the definition of a Sub-registry),
the following information MUST be provided when registering
new values for existing "Predefined" 'geo' URI Parameters:
Name of the Parameter.Reference to the RFC or other permanent and readily
available public specification defining the new values.The following table provides the initial values for this
registry:
Parameter Name Value Restriction Reference(s)
----------------------------------------------------------
crs Predefined [RFCxxxx]
u Constrained [RFCxxxx]
[Note to RFC Editor: Replace RFCxxxx with reference to this
document]The Registration Policy for 'geo' URI Parameters and
their value definitions shall be "Specification Required,
Designated Expert", as defined in .This document creates a new IANA Sub-registry named "'geo' URI 'crs' Parameter Values", based on the Registry specified in and the information in this section and . The syntax
of the 'crs' parameter is constrained by the ABNF given in
.
When registering a new value for the 'crs' parameter, the
following information MUST be provided:
Value of the parameter.Reference to the RFC or other permanent and readily
available public specification defining the use of the
CRS in the scope of the 'geo' URI.
The specification should contain information that is similar
to the WGS-84-specific text given in this document.
Reference to the definition of the CRS itself, preferably
as well known URNs (if available). Note that different URNs
may exist for the 2-dimensional and 3-dimensional case.The following table provides the initial values for this
registry:
crs Value Reference(s) CRS definition(s)
-----------------------------------------------------------
wgs84 [RFCxxxx] urn:ogc:def:crs:EPSG::4326
urn:ogc:def:crs:EPSG::4979
[Note to RFC Editor: Replace RFCxxxx with reference to this
document]The registration policy for the "'geo' URI 'crs' Parameter Values"
Registry shall be "Specification Required, IESG Approval" as defined
in . contains some text about the motivation
when to introduce new 'crs' values.Because the 'geo' URI is not tied to any specific protocol
and identifies a physical location rather than a network
resource,
most of the general security considerations on URIs (Section 7 of
RFC 3986) do not apply. However, the following (additional)
issues apply:
The URI syntax
makes it possible to construct 'geo' URIs which don't
identify a valid location. Applications MUST NOT use
URIs with such values, and SHOULD warn the user when such
URIs are encountered.
An example of such an URI referring to an invalid location
would be <geo:94,0> (latitude "beyond" north pole).
A 'geo' URI by itself is just an opaque reference to a
physical location, expressed by a set of spatial oordinates. This
does not fit the "Location Information" definition according to
Section 5.2 of GEOPRIV Requirements,
because there is not necessarily a "Device" involved.
Because there is also no
way to specify the identity of a "Target" within the confines
of a 'geo' URI, it also does not fit the
specification of an "Location Object" (Section 5.2 of RFC 3693).
However, if a 'geo' URI is used in a context where it identifies
the location of a Target, it becomes part of a Location Object and
is therefore subject to GEOPRIV rules.
Therefore, when 'geo' URIs are put into such contexts, the
privacy requirements of RFC 3693 MUST be met.
Martin Thomson has provided significant text around the
definition of the "uncertainty" parameter and the GML mappings.
The authors further wish to acknowledge the helpful
contributions from Carl Reed,
Bill McQuillan, Martin Kofal, Andrew Turner, Kim Sanders,
Ted Hardie, Cullen Jennings, Klaus Darilion, Bjorn Hoehrmann,
Alissa Cooper and Ivan Shmakov.
Alfred Hoenes has provided an extremely helpful in-depth
review of the document.[Note to editors: This section is to be removed before publication - XML source available on request]
draft-ietf-geopriv-geo-uri-04
Added "crs" URI parameter registryAdded example URI to IntroductionChanged quoting of parameters according to Alfred Hoenes' commentsdraft-ietf-geopriv-geo-uri-03
Updated privacy considerations section as per Alissa's commentsAdded text on uncertainty applied to all given dimensionsvarious editorial changesChanged ABNF to reflect order of parameters (CRS first, then U, then othersdraft-ietf-geopriv-geo-uri-02
Added IANA registry for 'geo' URI Parameters and valuesMoved change log to appendixAdded "u" parameter to ABNF, restructred ABNF slightlyAdded new section describing uncertaintyChanged mapping examples, added some for uncertaintyAdded text that number of digits shouldn't be confused
with uncertainty or accuracymarked GML mappings as non-normative based on URI expert
review adviceadded internationalization consideration sectionvarious other changes based on Expert Reviewdraft-ietf-geopriv-geo-uri-01
added parameters to ABNFadded optional 'crs' parameter to allow future use of other CRSesMany other changes to not preclude the future specification of
other CRSes.some typos fixes - credits Bill McQuillandraft-ietf-geopriv-geo-uri-00
submitted as WG itemchanged IPR text because of text used from RFC 4395added considerations for comparing +180/-180 longitude URIssome editorial changesdraft-mayrhofer-geopriv-geo-uri-01
added terminology text about WGS-84 (credits Carl Reed)removed "resolution" / "uncertainty" textadded considerations regarding polesadded text about invalid URIsdraft-mayrhofer-geopriv-geo-uri-00
Initial version under new name, reverting to "plain" lat/lon
scheme, with the "tiling" scheme moved to seperate draft
(potentially published as "draft-mayrhofer-geopriv-geotile-uri").
refer to draft-mayrhofer-geo-uri-01 for the history of this
document.
Added GML mapping sectiondraft-mayrhofer-geo-uri-01
removed parametersdraft-mayrhofer-geo-uri-00
initial draft