[OSM-dev] Difference between osm and osmChange formats
Sergey Galuzo
sergal at microsoft.com
Wed Jun 1 18:29:39 BST 2011
Thanks for excellent info.
As far as special format for diffs... Why do we have it as opposed just to using full history format for diffs? Same data...
Thanks,
Sergey.
-----Original Message-----
From: Frederik Ramm [mailto:frederik at remote.org]
Sent: Wednesday, June 01, 2011 6:34 AM
To: dev at openstreetmap.org
Subject: Re: [OSM-dev] Difference between osm and osmChange formats
Hi,
On 05/31/11 23:43, Sergey Galuzo wrote:
> Obvious differences between full and change are explicit
> create/modify/delete tags.
We have full history OSM files and normal OSM files (both use .osm extension and <osm>...</osm>), and we have simple diffs and replication diffs (both use .osc and <osmChange>...</osmChange>).
Normal OSM files never have a "visible" attribute, and they contain at most one version of every object.
Objects in full history OSM files contain a "visible" attribute, and these files may contain different versions of the same object, with at most one having visible=true. If there is a version with visible=true, it will be the highest numbered version of that object. They do not necessarily contain a full sequence of versions, i.e. you could have a full history file that only has versions 2 and 5 of something.
(There are also .osm files as written by the JOSM editor; these do not have a "visible" attribute but may have an "action" attribute which, if set to "delete", has a similar effect. This is a niche case.)
The diffs contain <delete>, <modify>, and <create> blocks. A version in <create> is usually 1. (Current implementation means it is *always* 1 but this could be changed; it is not specified in the API that the first version of something must always be 1.) A version in <create> or <modify> can never have visible=false.
If you have full replication diffs then one diff can contain the same object multiple times, with different version numbers. It is possible for the same object to appear in the <create>, <modify>, and <delete> section of the same replication diff. Versions are not guaranteed to be sorted, i.e. you could first encounter version 6 in a <delete> block and later encounter version 5 in a <modify>.
Since multiple edits are conflated in a simple diff, it is possible that a simple diff contains an object as version 2 in a <modify> block but the consumer has never before seen that object (because the version 1 that would have been in a <create> has happened in the same diff interval as the modification to version 2).
In short, your assumption
var changeTag = !Visible ? "delete" : Version == 1 ? "create" : "modify";
is mostly true but it depends very much on the context in which you want to use it; there's a lot of things to trip you over.
Bye
Frederik
_______________________________________________
dev mailing list
dev at openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev
More information about the dev
mailing list