[8853] | 1 | #!/usr/bin/env python
|
---|
| 2 | # generate tiles
|
---|
| 3 |
|
---|
| 4 | """Generate gheat tiles.
|
---|
| 5 | """
|
---|
| 6 | import math
|
---|
| 7 | import os
|
---|
| 8 | import sys
|
---|
| 9 | from os.path import join
|
---|
| 10 |
|
---|
| 11 | import aspen
|
---|
| 12 | root = aspen.find_root()
|
---|
| 13 | aspen.configure(['--root', root])
|
---|
| 14 |
|
---|
| 15 | from gmerc import ll2px
|
---|
| 16 | from gheat import pil_ as backend
|
---|
| 17 |
|
---|
| 18 |
|
---|
| 19 | color_schemes = dict() # this is used below
|
---|
| 20 | _color_schemes_dir = os.path.join(aspen.paths.__, 'etc', 'color-schemes')
|
---|
| 21 | for fname in os.listdir(_color_schemes_dir):
|
---|
| 22 | if not fname.endswith('.png'):
|
---|
| 23 | continue
|
---|
| 24 | name = os.path.splitext(fname)[0]
|
---|
| 25 | fspath = os.path.join(_color_schemes_dir, fname)
|
---|
| 26 | color_schemes[name] = backend.ColorScheme(name, fspath)
|
---|
| 27 |
|
---|
| 28 |
|
---|
| 29 | def load_dots(backend):
|
---|
| 30 | """Given a backend module, return a mapping of zoom level to Dot object.
|
---|
| 31 | """
|
---|
| 32 | return dict([(zoom, backend.Dot(zoom)) for zoom in range(16)])
|
---|
| 33 | dots = load_dots(backend) # factored for easier use from scripts
|
---|
| 34 |
|
---|
| 35 |
|
---|
| 36 | for zoom in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]: # generate for zoomlevels
|
---|
| 37 | width, height = ll2px(-90, 180, zoom)
|
---|
| 38 | numcols = int(math.ceil(width / 256.0))
|
---|
| 39 | numrows = int(math.ceil(height / 256.0))
|
---|
| 40 | cs_name = 'classic'
|
---|
| 41 | color_scheme = color_schemes[cs_name]
|
---|
| 42 | for x in range(numcols):
|
---|
| 43 | for y in range(numrows):
|
---|
| 44 | fspath = join( aspen.paths.root
|
---|
| 45 | , cs_name
|
---|
| 46 | , str(zoom)
|
---|
| 47 | , "%d,%d" % (x, y)
|
---|
| 48 | ) + '.png'
|
---|
| 49 | tile = backend.Tile(color_scheme, dots, zoom, x, y, fspath)
|
---|
| 50 | sys.stdout.write('tile %s\n' % fspath); sys.stdout.flush()
|
---|
| 51 | if tile.is_empty():
|
---|
| 52 | sys.stdout.flush()
|
---|
| 53 | elif tile.is_stale():
|
---|
| 54 | sys.stdout.write('rebuilding tile %s\n' % fspath)
|
---|
| 55 | sys.stdout.flush()
|
---|
| 56 | tile.rebuild()
|
---|
| 57 | tile.save()
|
---|
| 58 | else:
|
---|
| 59 | sys.stdout.write('skipping cached tile %s\n' % fspath)
|
---|
| 60 | sys.stdout.flush()
|
---|