Typo fixed
[pyrungps.git] / render_tiles.py
index 1c57b0b46d5ce9c976fbb373afb8abac683dd13c..5dae0290ce5f4e32f1e27223c01e9ecb63d49a0d 100644 (file)
@@ -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