X-Git-Url: https://git.rvb.name/pyrungps.git/blobdiff_plain/5c18c71d0182aeb1424dba1dcc54fb23929ef85c..9b3eba0f59aba21ee3f70755f6381d1e175f8d45:/render_tiles.py diff --git a/render_tiles.py b/render_tiles.py index f181cbe..3d95a85 100644 --- a/render_tiles.py +++ b/render_tiles.py @@ -5,72 +5,58 @@ 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() - queue_tiles(db,minlat,minlon,maxlat,maxlon) + queue_tiles(db,minlat,minlon,maxlat,maxlon,forced_max_zoom) -def queue_tiles(db,minlat,minlon,maxlat,maxlon): +def queue_tiles(db,minlat,minlon,maxlat,maxlon,forced_max_zoom=None): conn = sqlite3.connect(db) # определяем примерный стартовый зум - minlatrad = math.radians(minlat) - maxlatrad = math.radians(maxlat) + minzoom=8 + if forced_max_zoom: + maxzoom=forced_max_zoom + else: + maxzoom=16 - minx = (minlon + 180.0)/360.0 - maxx = (maxlon + 180.0)/360.0 - - miny = (1.0 - math.log(math.tan(minlatrad) + (1 / math.cos(minlatrad))) / math.pi) / 2.0 - maxy = (1.0 - math.log(math.tan(maxlatrad) + (1 / math.cos(maxlatrad))) / math.pi) / 2.0 - - if minx>maxx: - minx,maxx = maxx,minx - - if miny>maxy: - miny,maxy = maxy,miny - - for zoom in range(9,16): - - n = 2 ** zoom - - minxt = int(minx * n) - minyt = int(miny * n) - maxxt = int(maxx * n) - maxyt = int(maxy * n) - - ins = conn.cursor() - 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 + ins = conn.cursor() + print minlat,maxlat,minlon,maxlon,minzoom,maxzoom + ins.execute('insert into render_queue(minlat,maxlat,minlon,maxlon,minzoom,maxzoom) values(?,?,?,?,?,?)',(minlat,maxlat,minlon,maxlon,minzoom,maxzoom)) conn.commit() -def process_queue(db,map): +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') + cur.execute('select id,minlat,maxlat,minlon,maxlon,minzoom,maxzoom from render_queue') list=cur.fetchall() for rec in list: - id,zoom,minx,maxx,miny,maxy=rec + id,minlat,maxlat,minlon,maxlon,minzoom,maxzoom=rec + + command = 'map='+map+ \ + ' z='+str(minzoom)+'-'+str(maxzoom)+ \ + ' lat='+str(minlat)+','+str(maxlat)+ \ + ' lon='+str(minlon)+','+str(maxlon) - command = 'render_list -a -m '+map+ \ - ' -z '+str(zoom)+' -Z '+str(zoom)+ \ - ' -x '+str(minx)+' -X '+str(maxx)+ \ - ' -y '+str(miny)+' -Y '+str(maxy) + if force: + command = 'tirex-batch -n 0 '+command + else: + command = 'tirex-batch -n 0 '+command+' -f not-exists' + + print command + if system(command)==0: dcur=conn.cursor() dcur.execute('delete from render_queue where id=?',(id,)) @@ -85,12 +71,30 @@ def main(): 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 - - process_queue(db,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__":