[OSM-dev] Daily Diff parsing - tile expiring
Brett Henderson
brett at bretth.com
Thu Aug 21 00:47:25 BST 2008
I have something in the works which could help with this although I'm
intending to release it along with version 0.6 updates of osmosis so
won't be ready for a little while.
Osmosis provides a postgresql schema (called pgsql) which contains
complete osm data without history. It is already available with 0.5
tasks. It already supports application of changesets although it hasn't
been extensively used yet. I'm enhancing it to add an "action" column
to node/way/relation tables. The intent is for osmosis to mark a
node/relation/way as modified during changeset import, then invoke a
user extensible stored procedure where an end user can add their own
logic (eg. to update their own extension tables).
As you've discovered, there's no simple way of doing this purely with
xml files. I believe the best solution will have to utilise a
database. The downside is that you'll need to maintain a full
production dataset in your local database to cover the entire planet.
The solution would work something like this:
1. Create a pgsql schema.
2. Import a production snapshot (ie. the planet).
3. Begin applying changesets to keep it up to date.
4. Add a stored procedure which will look at changed ways and nodes to
detect which tiles are impacted and write these to a new "expired_tiles"
table.
5. Tell osmosis to trigger the stored procedure every time a changeset
is applied (will probably be triggered by another command line argument
to osmosis)
6. Write some code to examine the "expired_tables" and trigger
re-rendering as appropriate.
This process could be invoked every hour or minute if desired and would
run very quickly with short intervals due to the small size of
incremental updates.
Roeland Douma wrote:
> Hi all,
>
> I'm working on a script to expire tiles bases on (daily) diffs. This so we can
> re-render the tiles with changes and keep the tiles without for a longer
> period of time. Which will allow us to have more up to date maps. And not
> have the server do more work than necessary since tiles that have no changes
> do not have to be re-renderd.
>
> This is easily done for nodes since they contain Lon/Lat tags. So for zoom a
> till b the tiles can be calculated and removed.
>
> However the problem starts when ways are parsed. Since ways only contain refs
> to nodes. So no Lat/Lon info is provided.
>
> The average daily diff contains > 700.000 node refs in way tags.
>
> I have tried to get all the nodes (1000 nodes at the same time) from the
> OSM-API. This solution provided me straight away with the Lon/Lat for the
> nodes. However this took a very very long time. And it is not very nice to do
> that on a daily basis. (also for the load on the server).
>
> An other solution I tried was running a local copy of the database. running
> oms2pgsql in slim-mode. However this took a long time. And when running the
> query (with >700.000 nodes) also took a very very long time. Now of course
> the Lat/Lon have to be parsed but that is not the problem.
>
> As you might have guessed both solutions do not work. Or at least not good
> enough for my taste. I would like a simple (or at least fast) solution.
>
> I think that adding the Lat/Lon tag to node references in the ways is not an
> option since it would require a huge amount of queries on the database when
> creating the diffs. The positive side of this would that it would only have
> to be done once.
>
> Something else would be to have some sort of bounding box tag at the ways.
> This is not optimal in tile expiring but is better than it is done now.
>
> Anybody with idea's on this matter?
>
> Greetings,
> Roeland
>
> _______________________________________________
> dev mailing list
> dev at openstreetmap.org
> http://lists.openstreetmap.org/listinfo/dev
>
More information about the dev
mailing list