a23b136fe8aba6a10a234f74155b9ddbad348f13
[pyrungps.git] / render_tiles.py
1 #!/usr/bin/env python
2 # coding: UTF-8
3
4 import sqlite3
5 import math
6 from pprint import pprint
7
8 def queue_render(db,filename):
9
10   conn = sqlite3.connect(db)
11   cur = conn.cursor()
12     
13   cur.execute("select minlat,minlon,maxlat,maxlon from tracks where filename=?" , (filename.decode('UTF-8'),))
14   
15   minlat,minlon,maxlat,maxlon=cur.fetchone()  
16   
17   # определяем примерный стартовый зум
18   
19   minlatrad = math.radians(minlat)
20   maxlatrad = math.radians(maxlat)
21   
22   minx = (minlon + 180.0)/360.0
23   maxx = (maxlon + 180.0)/360.0
24   
25   miny = (1.0 - math.log(math.tan(minlatrad) + (1 / math.cos(minlatrad))) / math.pi) / 2.0
26   maxy = (1.0 - math.log(math.tan(maxlatrad) + (1 / math.cos(maxlatrad))) / math.pi) / 2.0
27
28   if minx>maxx:
29     minx,maxx = maxx,minx
30     
31   if miny>maxy:
32     miny,maxy = maxy,miny
33   
34   for zoom in range(9,16):
35     
36     n = 2 ** zoom
37     
38     minxt = int(minx * n)
39     minyt = int(miny * n)
40     maxxt = int(maxx * n)
41     maxyt = int(maxy * n)
42     
43     ins = conn.cursor()
44     print zoom,minxt,maxxt,minyt,maxyt
45     ins.execute('insert into render_queue(zoom,minx,maxx,miny,maxy) values(?,?,?,?,?)',(zoom,minxt,maxxt,minyt,maxyt))
46
47     if (maxxt-minxt>16) or (maxyt-minyt>12):
48       conn.commit()
49       break
50
51   conn.commit()        
52
53 def process_queue(db,map):
54
55   from os import system
56
57   conn = sqlite3.connect(db)
58   cur = conn.cursor()
59   cur.execute('select id,zoom,minx,maxx,miny,maxy from render_queue')
60   list=cur.fetchall()
61
62   for rec in list:
63   
64     id,zoom,minx,maxx,miny,maxy=rec
65
66     command = 'render_list -a -m '+map+ \
67       ' -z '+str(zoom)+' -Z '+str(zoom)+ \
68       ' -x '+str(minx)+' -X '+str(maxx)+ \
69       ' -y '+str(miny)+' -Y '+str(maxy)
70     if system(command)==0:
71       dcur=conn.cursor()
72       dcur.execute('delete from render_queue where id=?',(id,))
73       conn.commit()
74
75 def main():
76
77   from optparse import OptionParser
78   
79   parser = OptionParser()
80   parser.add_option("-d", "--data", dest="directory",
81     help="Data directory", metavar="DIR")
82   parser.add_option("-m", "--map", dest="map",
83     help="Map name", metavar="MAP")
84   (options, args) = parser.parse_args()  
85
86   db=options.directory+'/gpx.db'
87   map=options.map  
88
89   process_queue(db,map)
90   
91 if __name__ == "__main__":
92
93   main()          
94