def heightmap_tiles_near(routes, dist_nm): tilesize = 64 zoomlevel = 8 tiles_on_levels = dict() tottiles = 0 while zoomlevel >= 0: path = os.path.join(os.getenv("SWFP_DATADIR"), "tiles/elev/level%d" % (zoomlevel)) blob = BlobFile(path, tilesize=tilesize) def cm(latlonstr, zoomlevel): return clampmerc( mapper.latlon2merc(mapper.from_str(latlonstr), zoomlevel)) resultset = get_all_tiles_near(routes, zoomlevel, dist_nm, tilesize) result = dict() for merc in resultset: result[merc] = blob.get_tile(*merc) tottiles += len(result) tiles_on_levels[zoomlevel] = result zoomlevel -= 1 return tiles_on_levels
def map_tiles_near(routes, dist_nm): tilesize = 256 zoomlevel = 7 tiles_on_levels = dict() tottiles = 0 path = os.path.join(os.getenv("SWFP_DATADIR"), "tiles/elev/level%d" % (zoomlevel)) blob = BlobFile(path, tilesize=tilesize) def cm(latlonstr, zoomlevel): return clampmerc( mapper.latlon2merc(mapper.from_str(latlonstr), zoomlevel)) resultset = get_all_tiles_near(routes, zoomlevel, dist_nm, tilesize) result = dict() for merc in resultset: rawtile = blob.get_tile(*merc) io = StringIO.StringIO(rawtile) io.seek(0) im = Image.open(io) x, y = merc print "Map merc ", merc x %= 512 y %= 512 if x >= 256: im = im.transpose(Image.FLIP_LEFT_RIGHT) print "X-flipping" else: print "Not X-flipping" if y >= 256: im = im.transpose(Image.FLIP_TOP_BOTTOM) print "Y-flippin'" else: print "Not Y-flippin'" buf = StringIO.StringIO() im.save(buf, "png") png = buf.getvalue() result[merc] = png tottiles += len(result) tiles_on_levels[zoomlevel] = result return tiles_on_levels
def map_tiles_near(routes,dist_nm): tilesize=256 zoomlevel=7 tiles_on_levels=dict() tottiles=0 path=os.path.join(os.getenv("SWFP_DATADIR"),"tiles/elev/level%d"%(zoomlevel)) blob=BlobFile(path,tilesize=tilesize) def cm(latlonstr,zoomlevel): return clampmerc(mapper.latlon2merc(mapper.from_str(latlonstr),zoomlevel)) resultset=get_all_tiles_near(routes,zoomlevel,dist_nm,tilesize) result=dict() for merc in resultset: rawtile=blob.get_tile(*merc) io=StringIO.StringIO(rawtile) io.seek(0) im=Image.open(io) x,y=merc print "Map merc ",merc x%=512 y%=512 if x>=256: im=im.transpose(Image.FLIP_LEFT_RIGHT) print "X-flipping" else: print "Not X-flipping" if y>=256: im=im.transpose(Image.FLIP_TOP_BOTTOM) print "Y-flippin'" else: print "Not Y-flippin'" buf=StringIO.StringIO() im.save(buf,"png") png=buf.getvalue() result[merc]=png tottiles+=len(result) tiles_on_levels[zoomlevel]=result return tiles_on_levels
def getmaptile(variant,zoomlevel,mx,my,mtime=None): """ Some explanation is in order for the mtime parameter: If it is supplied, the blobfiles are reloaded if mtime given does not match the mtime of the blobs loaded. (mtime = MTIME attribute of level5-file in airspace set). If mtime is not set, the blobs are never reloaded. """ #print "Accessing blobs %s for zoomlevel %s"%(variant,zoomlevel) global blobcache global last_reopencheck global loaded_mtime reopen_blobs=False mtime=get_mtime() #print "mtime, level 5: ",mtime blobcachelock.acquire() #print "Gettile: mtime: %d, last_mtime: %d, loaded mtime: %d"%(mtime,last_mtime,loaded_mtime) try: if mtime!=None and mtime!=loaded_mtime: reopen_blobs=True if blobcache==None or reopen_blobs: #print "Reopen blobs:",reopen_blobs blobcache=dict() loadvariants=["airspace","plain",'elev'] for loadvariant in loadvariants: for loadzoomlevel in xrange(14): path=os.path.join(os.getenv("SWFP_DATADIR"),"tiles/%s/level%d"%( loadvariant, loadzoomlevel)) #print "Reading: ",path if os.path.exists(path): #print "Reopening "+path ltilesize=256 if loadvariant=="elev": ltilesize=256 blobcache[(loadvariant,loadzoomlevel)]=BlobFile(path,tilesize=ltilesize) loaded_mtime=mtime finally: blobcachelock.release() blob=blobcache.get((variant,zoomlevel),None) #print "Got blob for zoomlevel: %d (=%d)"%(zoomlevel,blob.zoomlevel) if blob==None: #print "Zoomlevel %d not loaded"%(zoomlevel,) return open("fplan/public/nodata.png").read(),dict(status="missing zoomlevel") #print "Reading tile: ",mx,my,zoomlevel d=blob.get_tile(mx,my) if d: return d,dict(status="ok") print "Missing tile at merc %d,%d zoom %d"%(mx,my,zoomlevel) return open("fplan/public/nodata.png").read(),dict(status="missing tile")
def heightmap_tiles_near(routes,dist_nm): tilesize=64 zoomlevel=8 tiles_on_levels=dict() tottiles=0 while zoomlevel>=0: path=os.path.join(os.getenv("SWFP_DATADIR"),"tiles/elev/level%d"%(zoomlevel)) blob=BlobFile(path,tilesize=tilesize) def cm(latlonstr,zoomlevel): return clampmerc(mapper.latlon2merc(mapper.from_str(latlonstr),zoomlevel)) resultset=get_all_tiles_near(routes,zoomlevel,dist_nm,tilesize) result=dict() for merc in resultset: result[merc]=blob.get_tile(*merc) tottiles+=len(result) tiles_on_levels[zoomlevel]=result zoomlevel-=1 return tiles_on_levels
def chop_up(inputfile,outputfile,level): im=Image.open(inputfile) w,h=im.size fac=1<<level w/=fac h/=fac print "Size",w,h limitx2=256*(int((w+255)/256)) limity2=256*(int((h+255)/256)) blob=BlobFile(outputfile,0, 0,0,limitx2,limity2,'w') for x in xrange(0,limitx2,256): for y in xrange(0,limity2,256): view=im.crop((fac*x,fac*y,fac*(x+256),fac*(y+256))) view=view.resize((256,256),Image.ANTIALIAS) view.save("tmp/temp%d_%d_%d.png"%(level,x,y)) io=StringIO.StringIO() view.save(io,'png') io.seek(0) pngdata=io.read() blob.add_tile(x,y,pngdata) blob.close() pass