X-Git-Url: https://git.rvb.name/pyrungps.git/blobdiff_plain/b8e66f213d0df36cb584685a34276d8c45882e71..dc810bdf49cac946b7fb551264bff0e74b525989:/render_tiles.py?ds=sidebyside diff --git a/render_tiles.py b/render_tiles.py index 1c57b0b..5dae029 100644 --- a/render_tiles.py +++ b/render_tiles.py @@ -2,17 +2,21 @@ # coding: UTF-8 import sqlite3 - import math +from pprint import pprint -def queue_render(db,filename): +def queue_render(db,filename,forced_max_zoom=None): conn = sqlite3.connect(db) cur = conn.cursor() - + cur.execute("select minlat,minlon,maxlat,maxlon from tracks where filename=?" , (filename.decode('UTF-8'),)) - - minlat,minlon,maxlat,maxlon=cur.fetchone() + minlat,minlon,maxlat,maxlon=cur.fetchone() + queue_tiles(db,minlat,minlon,maxlat,maxlon,forced_max_zoom) + +def queue_tiles(db,minlat,minlon,maxlat,maxlon,forced_max_zoom=None): + + conn = sqlite3.connect(db) # определяем примерный стартовый зум @@ -31,7 +35,13 @@ def queue_render(db,filename): if miny>maxy: miny,maxy = maxy,miny - for zoom in range(9,16): + minzoom=8 + if forced_max_zoom: + maxzoom=forced_max_zoom + else: + maxzoom=16 + + for zoom in range(minzoom,maxzoom+1): n = 2 ** zoom @@ -44,9 +54,79 @@ def queue_render(db,filename): print zoom,minxt,maxxt,minyt,maxyt ins.execute('insert into render_queue(zoom,minx,maxx,miny,maxy) values(?,?,?,?,?)',(zoom,minxt,maxxt,minyt,maxyt)) - if (maxxt-minxt>16) or (maxyt-minyt>12): - conn.commit() - break + if forced_max_zoom is None: + if (maxxt-minxt>32) or (maxyt-minyt>24): + print "Breaking..." + conn.commit() + break conn.commit() + +def process_queue(db,map,force=False): + + from os import system + + conn = sqlite3.connect(db) + cur = conn.cursor() + cur.execute('select id,zoom,minx,maxx,miny,maxy from render_queue') + list=cur.fetchall() + + for rec in list: + + id,zoom,minx,maxx,miny,maxy=rec + + command = 'map='+map+ \ + ' z='+str(zoom)+ \ + ' x='+str(minx)+'-'+str(maxx)+ \ + ' y='+str(miny)+'-'+str(maxy) + + if force: + command = 'tirex-batch '+command + else: + command = 'tirex-batch '+command+' -f not-exists' + + print command + + if system(command)==0: + dcur=conn.cursor() + dcur.execute('delete from render_queue where id=?',(id,)) + conn.commit() + +def main(): + + from optparse import OptionParser + + parser = OptionParser() + parser.add_option("-d", "--data", dest="directory", + help="Data directory", metavar="DIR") + parser.add_option("-m", "--map", dest="map", + help="Map name", metavar="MAP") + parser.add_option("-z", "--zoom", dest="zoom", + help="Maximal zoom (forced), used with coordinates pairs (minlat minlon maxlat maxlon) or filename in arguments", metavar="MAP") + parser.add_option("-f", "--force", dest="force", + help="Force tile regeneration (on/off), default off") + (options, args) = parser.parse_args() + + print options,args + + db=options.directory+'/gpx.db' + map=options.map + zoom=options.zoom + force=(options.force=='on') + + if zoom: + if len(args)==1: + filename,=args + print "Rendering file: "+filename+"\n" + queue_render(db,filename) + else: + minlat,minlon,maxlat,maxlon=args + queue_tiles(db,float(minlat),float(minlon),float(maxlat),float(maxlon),int(zoom)) + + if map: + process_queue(db,map,force) + +if __name__ == "__main__": + + main() \ No newline at end of file