[OSM-dev] mod_tile svn's project variables 1)hardcoded 2)in many files
frederik at remote.org
Wed Feb 3 00:45:42 GMT 2010
Jonathan-David SCHRODER wrote:
> for the render_expired.c program (;-) )..
Uh-oh, that's my nasty little secret I believe.
render_expired is more or less a version of render_list, but it
processes an expiry list coming from osm2pgsql. Because osm2pgsql has no
knowledge about meta tiles, the expire list might contain up to 64 tiles
that fall onto the same meta tile. render_list tries to keep track of
meta tiles already requested for rendering, to avoid requesting the same
tile multiple times.
It does so in a bit array which is manipulated with these beastly things
(which anyone is welcome to replace by something that is more en vogue):
> #define TILE_REQUESTED(z,x,y) \
> #define SET_TILE_REQUESTED(z,x,y) \
> tile_requested[z][((x)*twopow[z]+(y))/(8*sizeof(int))] |= (0x01 <<
You should be able to simply pre-compute the twopow array to something
higher and it should work.
These macros are used only at the meta tile level, i.e. the "z" in these
macros is always the real zoom level minus 3. If they break with z=19
then that means that the script cannot handle tiles on zoom level 22.
Are you *sure* you want to handle tiles on zoom level 22? On that zoom
level, one pixel corresponds to 4 centimetres on the surface of the
earth (at the equator). One tile corresponds to less than 100 square
metres. You'll be rapidly approaching a situation where OSM's accuracy
becomes a problem...
You will need roughly 2^(2*maxzoom-39) GB of RAM to run this program. So
if you want to go down to zoom level 22, then that's 32 GB RAM.
For your application, you might want to use a different approach, one
that keeps rendered tiles in a tree or list like osm2pgsql does and not
one that makes an array like render_expired.
Frederik Ramm ## eMail frederik at remote.org ## N49°00'09" E008°23'33"
More information about the dev