Tile expire methods
This page lists methods to expire tiles after a map data change event.
Background on tiles expiry methods
Tiles are small images (png or jpeg generally) that make up a map's graphics when displayed on a slippy map.
Tiles are generated in a process named rendering, which takes as input :
- a database or file(s) of things to render,
- and styles and rules telling how to render them.
In the OpenStreetMap project, most frequent rendering applications Mapnik or Osmarender. Those rendering applications generally take vector data as input from databases, local or remote files, and output those as raster (or vector images)./
Tiles can be rendered synchronously or not with caching mechanisms thanks to tile rendering daemons :
- as a bulk for several levels of zooms,
- on-demand for a specific bounding box (also named extent)
- and also in background.
Famous tile rendering daemons setups are :
- mod_tile and renderd <= used by openstreetmap.org's servers
- tilecache <= used by tiledrawer.com
The need for a tiles expiry mechanism
For tiles to reflect the last rendering settings (eg. stylesheets) and map database's contents (eg. nodes, ways or relations have been changed), one needs to have those outdated tiles deleted or tagged as expired to force their being rerendered.
Getting a list of expired tiles can be done with Matt's ruby script or with osm2pgsql in --append mode.
Mod_tile + render_expired script tiles expire methods
... with tiles expiry list from osm2pgsql --append --expire-tiles --expire-output option
When running osm2pgsql --append (or -a), use -e options to generate a list of tiles that need to be expired. Pick a value for -e that is 3 levels lower than your max zoom level.
osm2pgsql -d gis -H localhost -U gisuser -S ~/osm2pgsql/default.style -P 5432 -s -C 800 -a diffs.osc.gz -e15 -o expire.list
You can then pass this list to the render_expired program (from the mod_tile project):
Here with expiring by touching of tiles from level 10 to the largest zoom value (tiles re-rendered on client access, mod_tile still can serve dirty tiles):
cat expire.list | /home/mapnik/mod_tile/render_expired --map=osm --min-zoom=10 --touch-from=10 >/dev/null
Here with full deletion of tiles from level 10 to the largest zoom value:
cat expire.list | /home/mapnik/mod_tile/render_expired --map=osm --min-zoom=10 --delete-from=10 >/dev/null
Here with requests to the renderd daemon to rerender the expired tiles during free time, filtering zoom with value greater than or equal to 10:
cat expire.list | /home/mapnik/mod_tile/render_expired --map=osm --min-zoom=10 >/dev/null
You could set it so that the lower zoom levels are also rerendered or deleted, but there is a great risk that they will be expired on *every* update, since they cover such a large area. It's better to approach tile expire of the low zooms another way. For example, you could delete or rerender them on a fixed schedule, once every day or week, or whatever works for your map and data.
... with tiles expiry list from Matt's ruby scripts
Matt's Ruby script is an alternative to the tile expiry provided by osm2pgsql. It is used on the tileservers operated by the OpenStreetMap Foundation. It has some limitations which can be found in the Readme file.