Permanent ID for OSM
This is an unofficial proposal for a "permanent ID" (osm_pid) for OpenStreetMap (OSM). See here for a more well known place for discussions.
Inhaltsverzeichnis
Goals and Requirements
The goal is to get an opaque (eventually fixed) length ASCII string for an OSM id.
That are the design considerations:
- The OSM id alone is not stable enough (as probably most agree); and it can represent many concepts (and that's by design in OSM).
- The version no. of the object is needed which makes clear which tags are (or have been) referred to.
- Coordinates are needed, because a change of the way and area geometries does not increment the version number.
Status of OSM id
One can use OSM id nevertheless (at own risk)! Many variants are known:
As is with OSM id (bigint) and a code for Node, Way, Relation in front. Currently many applications depend on plain osm_id, eventually preceeded by node,way,relation (or N/W/R), like theses web applications:
- The main OSM web page: Example Denner Hombrechtikon https://www.openstreetmap.org/node/6313169265
- Qwant Maps: Example Denner Hombrechtikon https://www.qwant.com/maps/place/osm:node:6313169265@Denner#map=18.00/47.2519793/8.7681836
- Castle Map: Example Schloss Rapperswil https://castle-map.infs.ch/#46.805,8.205,8z,W417258377
Another usage of osm_id is to convert it to a single big integer: It's possible to encode the type (Node, Way, Relation) into the OSM id as a single integer (64 bit): osm_id = <node id> × 10 (eg. 123 → 1230), osm_id = (<way id> × 10) + 1 (eg. 123 → 1231), osm_id (<relation id> × 10) + 4 (eg. 123 → 1234). (Source: Mapbox, see [1]). Example: "Schloss Kyburg" is a relation with id 1169711, so it becomes 11697114.
osm_id*10 -- Node osm_id*10+1 -- Way osm_id*10+4 -- Relation
Format of OSM Permanent ID
A stable Permanent ID could have the following form (variable length to a maximum of currently 35 chars):
[N|W|R]<osm_id>#<version>[+|-]<lon>[+|-]<lat>
where:
- N,W,R stands for Node, Way, or Relation.
- osm_id an unsigned big integer ("digits").
- version is an unsigned integer with a hash in front.
- coordinates (lat/lon) are signed floats (always showing the +/- sign), with a maximum of 6 digits. In case of a line (linestring) or an area/relation (polygon) geometries the coordinates taken into account are the lat/lon minimum of the geometry.
Example: "Schloss Kyburg" (Castle Kyburg) has relation 1169711, version #5 at coordinates 47.4584, 8.74343 which becomes following Permanent ID:
osm_pid = R1169711#5+47.4584+8.74343
OSM Permanent ID Service
In order to be really useful, a service should be implemented, which returns most recent object given a possibly old Permanent ID if an object has been changed; thus having another Permanent ID where any of it's parts may have changed (most probably just the version no.). Such a service must have access to the fully planet including the history and it must be reliable and responsive.
Alternatives
See https://wiki.openstreetmap.org/wiki/Permanent_ID for a more official state of discussions.
'geo' URI as OSM Permanent ID
Use URI Scheme "Uniform Resource Identifier for Geographic Locations " ('geo' URI).
For a promising implementation see Mangrove.reviews.
Example: Supermarket Denner Partner, Hombrechtikon, https://www.openstreetmap.org/node/6313169265
OpenLR
OpenLR (Location Referencing) - a free spec. by TomTom for linear geometries like streets [2].