Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 6
0
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