def create_merc_elevmap(dest): zoomlevel = 8 limitx1, limity1, limitx2, limity2 = merc_limits(zoomlevel, hd=True) tilesizemask = tilesize - 1 #a,b=mapper.latlon2merc((61,15),zoomlevel) #limitx1,limity1=int(a),int(b) #limity1=int(19000) #limity2=limity1+tilesize*16 #limitx1=int(35000) #limitx2=limitx1+tilesize*16 #tilesizemask=tilesize-1 #limitx1&=~tilesizemask #limity1&=~tilesizemask #limitx2&=~tilesizemask #limity2&=~tilesizemask assert (limitx1 & tilesizemask) == 0 assert (limity1 & tilesizemask) == 0 assert (limitx2 & tilesizemask) == 0 assert (limity2 & tilesizemask) == 0 if os.path.exists(dest): os.unlink(dest) blob = BlobFile(dest, zoomlevel, limitx1, limity1, limitx2, limity2, "w", tilesize=tilesize) for by in xrange(limity1, limity2, tilesize): for bx in xrange(limitx1, limitx2, tilesize): f = StringIO() for y in xrange(tilesize): for x in xrange(tilesize): mx = bx + x my = by + y latlon = mapper.merc2latlon((mx, my), zoomlevel) elev = int(get_terrain_elev(latlon)) #f.write(pack(">h",elev)) #min f.write(pack(">h", elev)) #max buf = f.getvalue() assert (len(buf) == tilesize * tilesize * 2) blob.add_tile(bx, by, buf) print "Perc complete: %.1f%%" % (100.0 * (by - limity1) / float(limity2 - limity1)) blob.close()
def create_merc_elevmap(dest): zoomlevel = 8 limitx1, limity1, limitx2, limity2 = merc_limits(zoomlevel, hd=True) tilesizemask = tilesize - 1 # a,b=mapper.latlon2merc((61,15),zoomlevel) # limitx1,limity1=int(a),int(b) # limity1=int(19000) # limity2=limity1+tilesize*16 # limitx1=int(35000) # limitx2=limitx1+tilesize*16 # tilesizemask=tilesize-1 # limitx1&=~tilesizemask # limity1&=~tilesizemask # limitx2&=~tilesizemask # limity2&=~tilesizemask assert (limitx1 & tilesizemask) == 0 assert (limity1 & tilesizemask) == 0 assert (limitx2 & tilesizemask) == 0 assert (limity2 & tilesizemask) == 0 if os.path.exists(dest): os.unlink(dest) blob = BlobFile(dest, zoomlevel, limitx1, limity1, limitx2, limity2, "w", tilesize=tilesize) for by in xrange(limity1, limity2, tilesize): for bx in xrange(limitx1, limitx2, tilesize): f = StringIO() for y in xrange(tilesize): for x in xrange(tilesize): mx = bx + x my = by + y latlon = mapper.merc2latlon((mx, my), zoomlevel) elev = int(get_terrain_elev(latlon)) # f.write(pack(">h",elev)) #min f.write(pack(">h", elev)) # max buf = f.getvalue() assert len(buf) == tilesize * tilesize * 2 blob.add_tile(bx, by, buf) print "Perc complete: %.1f%%" % (100.0 * (by - limity1) / float(limity2 - limity1)) blob.close()
def refine_merc_elevmap(src, srczoomlevel): zoomlevel = srczoomlevel - 1 limitx1, limity1, limitx2, limity2 = merc_limits(zoomlevel, hd=True) tilesizemask = tilesize - 1 assert (limitx1 & tilesizemask) == 0 assert (limity1 & tilesizemask) == 0 srcblob = BlobFile(src + "%d" % (srczoomlevel,), tilesize=tilesize) trgfile = src + "%d" % (zoomlevel,) if os.path.exists(trgfile): os.unlink(trgfile) trgblob = BlobFile(trgfile, zoomlevel, limitx1, limity1, limitx2, limity2, "w", tilesize=tilesize) for by in xrange(limity1, limity2, tilesize): # if (by-limity1)/float(limity2-limity1)>0.2: # break for bx in xrange(limitx1, limitx2, tilesize): print "Perc complete: %.1f%%" % (100.0 * (by - limity1) / float(limity2 - limity1)) loout = numpy.zeros((tilesize, tilesize)) hiout = numpy.zeros((tilesize, tilesize)) for suby in xrange(2): for subx in xrange(2): srcx = 2 * (bx) + subx * tilesize srcy = 2 * (by) + suby * tilesize buf = srcblob.get_tile(srcx, srcy) if buf == None: buf = onebuf print "Using onebuf" # print "Got buf:",md5.md5(buf).hexdigest() # print "got at %d,%d: %d bytes"%(srcx,srcy,len(buf) if buf else 0) assert len(buf) == tilesize * tilesize * 2 fi = StringIO(buf) # losub=numpy.zeros((tilesize,tilesize)) hisub = numpy.zeros((tilesize, tilesize)) for j in xrange(tilesize): for i in xrange(tilesize): # losub[j,i]=unpack(">h",fi.read(2))[0] hisub[j, i] = unpack(">h", fi.read(2))[0] fi.close() del fi tsh = tilesize / 2 for j in xrange(tilesize / 2): for i in xrange(tilesize / 2): def s(sub, fn): return fn(sub[2 * j + a, 2 * i + b] for (a, b) in product(xrange(2), xrange(2))) # losum=s(losub,min) hisum = s(hisub, max) # print "losum: %d from %s"%(losum,losub[2*j,2*i]) crd = (j + suby * tsh, i + subx * tsh) # losum=suby*500+subx*2000 # hisum=suby*100+subx*500 # loout[crd]=losum hiout[crd] = hisum # del losub del hisub # print "loout:",loout # print "hiout:",hiout f = StringIO() for j in xrange(tilesize): for i in xrange(tilesize): # f.write(pack(">h",loout[j,i])) #min f.write(pack(">h", hiout[j, i])) # max trgblob.add_tile(bx, by, f.getvalue())
def refine_merc_elevmap(src, srczoomlevel): zoomlevel = srczoomlevel - 1 limitx1, limity1, limitx2, limity2 = merc_limits(zoomlevel, hd=True) tilesizemask = tilesize - 1 assert (limitx1 & tilesizemask) == 0 assert (limity1 & tilesizemask) == 0 srcblob = BlobFile(src + "%d" % (srczoomlevel, ), tilesize=tilesize) trgfile = src + "%d" % (zoomlevel, ) if os.path.exists(trgfile): os.unlink(trgfile) trgblob = BlobFile(trgfile, zoomlevel, limitx1, limity1, limitx2, limity2, "w", tilesize=tilesize) for by in xrange(limity1, limity2, tilesize): #if (by-limity1)/float(limity2-limity1)>0.2: # break for bx in xrange(limitx1, limitx2, tilesize): print "Perc complete: %.1f%%" % (100.0 * (by - limity1) / float(limity2 - limity1)) loout = numpy.zeros((tilesize, tilesize)) hiout = numpy.zeros((tilesize, tilesize)) for suby in xrange(2): for subx in xrange(2): srcx = 2 * (bx) + subx * tilesize srcy = 2 * (by) + suby * tilesize buf = srcblob.get_tile(srcx, srcy) if buf == None: buf = onebuf print "Using onebuf" #print "Got buf:",md5.md5(buf).hexdigest() #print "got at %d,%d: %d bytes"%(srcx,srcy,len(buf) if buf else 0) assert (len(buf) == tilesize * tilesize * 2) fi = StringIO(buf) #losub=numpy.zeros((tilesize,tilesize)) hisub = numpy.zeros((tilesize, tilesize)) for j in xrange(tilesize): for i in xrange(tilesize): #losub[j,i]=unpack(">h",fi.read(2))[0] hisub[j, i] = unpack(">h", fi.read(2))[0] fi.close() del fi tsh = tilesize / 2 for j in xrange(tilesize / 2): for i in xrange(tilesize / 2): def s(sub, fn): return fn( sub[2 * j + a, 2 * i + b] for (a, b) in product(xrange(2), xrange(2))) #losum=s(losub,min) hisum = s(hisub, max) #print "losum: %d from %s"%(losum,losub[2*j,2*i]) crd = (j + suby * tsh, i + subx * tsh) #losum=suby*500+subx*2000 #hisum=suby*100+subx*500 #loout[crd]=losum hiout[crd] = hisum #del losub del hisub #print "loout:",loout #print "hiout:",hiout f = StringIO() for j in xrange(tilesize): for i in xrange(tilesize): #f.write(pack(">h",loout[j,i])) #min f.write(pack(">h", hiout[j, i])) #max trgblob.add_tile(bx, by, f.getvalue())