[OSM-dev] Osmosis, Changesets, Diffs (replicate) and general questions

Brett Henderson brett at bretth.com
Wed Oct 28 21:42:38 GMT 2009


Lars Francke wrote:As Fred has already pointed out it's created with a 
separate tool.
>>> 3)
>>> * My initial import of OSMdoc data is done using a custom program.
>>> * The following data adjustments are done using the diff-files, the
>>> database (in a state as it was _before_ the diff), osmosis and an
>>> osmosis plugin
>>> * The initial import of OSM data is done using osmosis (--write-pgsql)
>>>
>>> As the minute-replicate diffs overlap (at least they used to do) the
>>> planet.osm dump it is best (..at least it used to be ;-) ) to create a
>>> "consistent" dump using the planet.osm and gradually applying diffs
>>> (using --apply-change) as there is no harm in applying changes that
>>> are already present in the planet.osm. What is the best way to do
>>> this? I hope I made myself clear, I don't know how to explain it
>>> better.
>>>
>>>       
>> I'm not sure I fully understand.  As you've stated, take a planet dump
>> and apply some overlapping diffs in sequence until you reach a point
>> after the planet creation completion time.  Just note that the new
>> minute replication diffs may not work with the --apply-change task just
>> yet because the new replication diffs may contain multiple versions of a
>> single entity.  The replication diffs are still experimental and tested
>> with all osmosis functionality.
>>     
>
> I think you understood correctly. I guess I'll have to check the
> apply-change task then. To see if it works with multiple versions or
> what would have to be changed for it to work.
>   
We have two choices here:
1. Fix all existing tasks working with changes to support full history 
changes.
2. Create a new task that can convert full history changes into simpler 
delta changes.

I tend to lean towards number 2 although this adds more burden to the 
end user in order to simplify dev effort.  For example, 
--simplify-change could be written which would accept a (sorted) full 
history (ie. replication) change stream, and produce a simplified change 
stream with only a single change per entity.

If an entity had multiple changes, those multiple changes would be 
collapsed into a single change.  This is not quite as simple as taking 
the most recent change.  For example, if a change stream contained node 
1 with a create change for version 1, and node 1 with a modify change 
for version 2, it would be necessary to write a single create change for 
node 1 with version 2 in the output.

If this task was created, the existing --apply-change could be used as 
it is which would simplify the code somewhat.

You could then invoke osmosis something like this:
osmosis --read-replication-interval --simplify-change --read-xml 
planet-old.osm --apply-change --write-xml planet-new.osm






More information about the dev mailing list