class ZipTilesBuilder(object): def __init__(self, filepath, close_zip, **builder_args): builder_args['tile_format'] = self.format_from_url( builder_args['tiles_url']) self.close_zip = close_zip self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set() def format_from_url(self, url): """ Try to guess the tile mime type from the tiles URL. Should work with basic stuff like `http://osm.org/{z}/{x}/{y}.png` or funky stuff like WMTS (`http://server/wmts?LAYER=...FORMAT=image/jpeg...) """ m = re.search(r'FORMAT=([a-zA-Z/]+)&', url) if m: return m.group(1) return url.rsplit('.')[-1] def add_coverage(self, bbox, zoomlevels): self.tiles |= set(self.tm.tileslist(bbox, zoomlevels)) def run(self): for tile in self.tiles: name = '{0}/{1}/{2}.png'.format(*tile) try: data = self.tm.tile(tile) except DownloadError: logger.warning("Failed to download tile %s" % name) else: self.zipfile.writestr(name, data) self.close_zip(self.zipfile)
def __init__(self, filepath, close_zip, **builder_args): builder_args['tile_format'] = self.format_from_url( builder_args['tiles_url']) self.close_zip = close_zip self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set()
class ZipTilesBuilder(object): def __init__(self, filepath, close_zip, **builder_args): builder_args['tile_format'] = self.format_from_url(builder_args['tiles_url']) self.close_zip = close_zip self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set() def format_from_url(self, url): """ Try to guess the tile mime type from the tiles URL. Should work with basic stuff like `http://osm.org/{z}/{x}/{y}.png` or funky stuff like WMTS (`http://server/wmts?LAYER=...FORMAT=image/jpeg...) """ m = re.search(r'FORMAT=([a-zA-Z/]+)&', url) if m: return m.group(1) return url.rsplit('.')[-1] def add_coverage(self, bbox, zoomlevels): self.tiles |= set(self.tm.tileslist(bbox, zoomlevels)) def run(self): for tile in self.tiles: name = '{0}/{1}/{2}.png'.format(*tile) try: data = self.tm.tile(tile) except DownloadError: logger.warning("Failed to download tile %s" % name) else: self.zipfile.writestr(name, data) self.close_zip(self.zipfile)
def __init__(self, zipfile, prefix="", **builder_args): self.zipfile = zipfile self.prefix = prefix builder_args['tile_format'] = self.format_from_url(builder_args['tiles_url']) self.tm = TilesManager(**builder_args) if not isinstance(settings.MOBILE_TILES_URL, str) and len(settings.MOBILE_TILES_URL) > 1: for url in settings.MOBILE_TILES_URL[1:]: args = builder_args args['tiles_url'] = url args['tile_format'] = self.format_from_url(args['tiles_url']) self.tm.add_layer(TilesManager(**args), opacity=1) self.tiles = set()
def __init__(self, filepath, close_zip, **builder_args): builder_args['tile_format'] = self.format_from_url(builder_args['tiles_url']) self.close_zip = close_zip self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) if not isinstance(settings.MOBILE_TILES_URL, str) and len(settings.MOBILE_TILES_URL) > 1: for url in settings.MOBILE_TILES_URL[1:]: args = builder_args args['tiles_url'] = url args['tile_format'] = self.format_from_url(args['tiles_url']) self.tm.add_layer(TilesManager(**args), opacity=1) self.tiles = set()
def main(args): try: shapefile = args[1] driver = ogr.GetDriverByName("ESRI Shapefile") dataSource = driver.Open(shapefile, 0) layer = dataSource.GetLayer() totalImages = layer.GetFeatureCount() print str(totalImages) + " Total Features" except IndexError: usage() return False tile_size = 256 zoomlevels = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] tms_scheme = False srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") g = 0 with open(args[2], 'w') as csvfile: fieldnames = ['z','x','y','v'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for feature in layer: the_geom = feature.GetGeometryRef() the_env = the_geom.GetEnvelope() ULLon = the_env[0] ULLat = the_env[3] LRLon = the_env[1] LRLat = the_env[2] id = str(g) print "Working on %s of %s Features" % (str(g+1),str(totalImages)) tm = TilesManager(tiles_dir="/tmp",tiles_url="http://{z}/{x}/{y}",cache=False) tiles = tm.tileslist(bbox=(ULLon, LRLat, LRLon, ULLat),zoomlevels=zoomlevels) for the_tile in tiles: print the_tile[0] # tilecontent = tm.tile(the_tile) projection = proj.GoogleProjection(tile_size, zoomlevels, tms_scheme) tileBBOX = projection.tile_bbox(the_tile) neLon = tileBBOX[2] neLat = tileBBOX[3] swLat = tileBBOX[1] swLon = tileBBOX[0] bboxWKT = "POLYGON ((%s %s, %s %s, %s %s, %s %s, %s %s))" % (neLon, neLat, neLon, swLat, swLon, swLat, swLon, neLat, neLon, neLat) bboxPoly = ogr.CreateGeometryFromWkt(bboxWKT) intersection = bboxPoly.Intersection(the_geom) if intersection.IsEmpty() == False: writer.writerow({'z': the_tile[0], 'x': the_tile[1],'y': the_tile[2], 'v': '1'}) #print "%s,%s,%s,1" % (the_tile[0],the_tile[1],the_tile[2]) g+=1
def create_tiles_manager(parameters): tm_args = { } tm_args['cache'] = True if parameters.mbtiles_file: tm_args['mbtiles_file'] = parameters.mbtiles_file if parameters.wmts_url: tm_args['tiles_url'] = parameters.wmts_url tm_args['tiles_headers'] = { } tm_args['tiles_headers']['User-Agent'] = 'hikingmap/render_tiles' tm_args['tiles_headers']['Accept'] = 'image/png,image/*;q=0.9,*/*;q=0.8' if parameters.wmts_subdomains: tm_args['tiles_subdomains'] = parameters.wmts_subdomains if parameters.mapnik_stylefile: tm_args['stylefile'] = parameters.mapnik_stylefile if parameters.cache_dir: tm_args['tiles_dir'] = parameters.cache_dir if parameters.tile_size: tm_args['tile_size'] = parameters.tile_size if parameters.tile_format: tm_args['tile_format'] = parameters.tile_format if parameters.tile_scheme: tm_args['tile_scheme'] = parameters.tile_scheme tm = TilesManager(**tm_args) return tm
class ZipTilesBuilder(object): def __init__(self, zipfile, prefix="", **builder_args): self.zipfile = zipfile self.prefix = prefix builder_args['tile_format'] = self.format_from_url(builder_args['tiles_url']) self.tm = TilesManager(**builder_args) if not isinstance(settings.MOBILE_TILES_URL, str) and len(settings.MOBILE_TILES_URL) > 1: for url in settings.MOBILE_TILES_URL[1:]: args = builder_args args['tiles_url'] = url args['tile_format'] = self.format_from_url(args['tiles_url']) self.tm.add_layer(TilesManager(**args), opacity=1) self.tiles = set() def format_from_url(self, url): """ Try to guess the tile mime type from the tiles URL. Should work with basic stuff like `http://osm.org/{z}/{x}/{y}.png` or funky stuff like WMTS (`http://server/wmts?LAYER=...FORMAT=image/jpeg...) """ m = re.search(r'FORMAT=([a-zA-Z/]+)&', url) if m: return m.group(1) return url.rsplit('.')[-1] def add_coverage(self, bbox, zoomlevels): self.tiles |= set(self.tm.tileslist(bbox, zoomlevels)) def run(self): for tile in self.tiles: name = '{prefix}{0}/{1}/{2}{ext}'.format( *tile, prefix=self.prefix, ext=settings.MOBILE_TILES_EXTENSION or self.tm._tile_extension ) try: data = self.tm.tile(tile) except DownloadError: logger.warning("Failed to download tile %s" % name) else: self.zipfile.writestr(name, data)
class ZipTilesBuilder(object): def __init__(self, filepath, **builder_args): self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set() def add_coverage(self, bbox, zoomlevels): self.tiles |= set(self.tm.tileslist(bbox, zoomlevels)) def run(self): for tile in self.tiles: name = '{0}/{1}/{2}.png'.format(*tile) try: data = self.tm.tile(tile) except DownloadError: logger.warning("Failed to download tile %s" % name) else: self.zipfile.writestr(name, data) self.zipfile.close()
def main(args): try: shapefile = args[1] driver = ogr.GetDriverByName("ESRI Shapefile") dataSource = driver.Open(shapefile, 0) layer = dataSource.GetLayer() totalImages = layer.GetFeatureCount() print str(totalImages) + " Total Images" except IndexError: usage() return False tile_size = 256 zoomlevels = [20] tms_scheme = False srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") g = 0 for feature in layer: the_ID = feature.GetField("id") the_name = feature.GetField("Name") the_geom = feature.GetGeometryRef() the_env = the_geom.GetEnvelope() ULLon = the_env[0] ULLat = the_env[3] LRLon = the_env[1] LRLat = the_env[2] id = str(g) print id + " " + str(g+1) + " of " + str(totalImages) tm = TilesManager(tiles_dir="/tmp",tiles_url="https://tile-live.appspot.com/getTile/?z={z}&x={x}&y={y}&layer=derivative&redirect=false") tiles = tm.tileslist(bbox=(ULLon, LRLat, LRLon, ULLat),zoomlevels=zoomlevels) x = 0 y = 0 z = 0 for the_tile in tiles: tilecontent = tm.tile(the_tile) fileType = magic.from_buffer(tilecontent, mime=True) fileRoot = id + "-" + str(x) projection = proj.GoogleProjection(tile_size, zoomlevels, tms_scheme) tileBBOX = projection.tile_bbox(the_tile) im = Image.open(StringIO.StringIO(tilecontent)) fileName = fileRoot + ".tiff" print fileName + str(tileBBOX) im.save(fileName) im.close() try: ds = gdal.Open(fileName, GA_Update) gt = CalcGeoTransform(tileBBOX, fileName) ds.SetGeoTransform(gt) ds.SetProjection(srs.ExportToWkt()) if ds.RasterCount == 3: drv = gdal.GetDriverByName('VRT') newDS = drv.CreateCopy(fileRoot + '.vrt', ds, 0) newDS.AddBand(gdal.GDT_Byte) newDS.GetRasterBand(4).SetColorInterpretation(GCI_AlphaBand) drv2 = gdal.GetDriverByName('GTiff') outDS = drv2.CreateCopy(fileRoot + '-4.tiff', newDS, 0) outDS.GetRasterBand(4).Fill(255) newDS = None outDS = None os.system('rm ' + fileName) os.system('rm ' + fileRoot + '.vrt') os.system('mv ' + fileRoot + '-4.tiff ' + fileName) ds = None # warpString = 'gdalwarp ' + fileName + ' clipped-' + fileRoot + '.tiff' + ' -cutline AOIs.shp -cwhere "id = \'' + str(the_ID) + '\'"' # print warpString os.system('gdalwarp ' + fileName + ' clipped-' + fileRoot + '.tiff' + ' -cutline AOIs.shp -cwhere "id = \'' + str(the_ID) + '\'"') os.system('rm ' + fileName) os.system('mv clipped-' + fileRoot + '.tiff ' + fileName) except RuntimeError as ex: raise IOError(ex) print "Weird one" x += 1 y += 1 if y == 1000: mosaicName = "mosaic" + str(z) + ".vrt" if z == 0: os.system('gdalbuildvrt ' + mosaicName + ' *.tiff') else: mosaicList = id + '-' + str(z) +'[0-9][0-9][0-9].tiff' os.system('gdalbuildvrt ' + mosaicName + ' ' + mosaicList) y = 0 z += 1 if z > 0: os.system('gdalbuildvrt rest.vrt ' + id + '-' + str(z) +'[0-9][0-9][0-9].tiff') os.system('gdalbuildvrt mosaic.vrt *.vrt') os.system('gdal_translate -of GTiff -projwin ' + str(ULLon) + " " + str(ULLat) + " " + str(LRLon) + " " + str(LRLat) + ' mosaic.vrt ' + id + ".tiff") os.system('rm *.aux.xml && rm *.png && rm *.vrt') z = 0 else: os.system('gdalbuildvrt mosaic.vrt ' + id + '-*.tiff') os.system('gdal_translate -of GTiff -projwin ' + str(ULLon) + " " + str(ULLat) + " " + str(LRLon) + " " + str(LRLat) + ' mosaic.vrt ' + id + ".tiff") os.system('rm ' + id +'-*.tiff && rm *.vrt') g += 1 os.system('ls *.tiff > filelist') os.system('tar -zcvf GoogleImages.tar.gz $(cat filelist)')
def __init__(self, filepath, close_zip, **builder_args): builder_args['tile_format'] = self.format_from_url(builder_args['tiles_url']) self.close_zip = close_zip self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set()
import os from landez import MBTilesBuilder, TilesManager # From a TMS tile server #tm = TilesManager(tiles_url="http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", # tiles_headers={'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}) tm = TilesManager(tiles_url="https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.jpg", tiles_headers={'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}) # trevassack #tiles = tm.tileslist(bbox=(-5.225440815122283,50.0443122338314, # -5.171796634824432,50.06410175820282), # zoomlevels=[14,15,16,17,18,19]) # falmouth tiles = tm.tileslist(bbox=(-5.162955831669365,50.134767490127274, -4.96932179846624, 50.197268922759214), zoomlevels=[18,19]) def build_dir(file_path): directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) for tile in tiles: print(tile) path=str(tile[0])+"/"+str(tile[1])+"/" filename=str(tile[2])+".jpg" if not os.path.exists(path+filename):
def __init__(self, filepath, **builder_args): self.zipfile = ZipFile(filepath, 'w') self.tm = TilesManager(**builder_args) self.tiles = set()
import os from landez import MBTilesBuilder, TilesManager # From a TMS tile server tm = TilesManager( tiles_url="http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", tiles_headers={ 'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36' }) tiles = tm.tileslist(bbox=(-5.225440815122283, 50.0443122338314, -5.171796634824432, 50.06410175820282), zoomlevels=[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]) def build_dir(file_path): directory = os.path.dirname(file_path) if not os.path.exists(directory): os.makedirs(directory) for tile in tiles: print(tile) tilecontent = tm.tile(tile) # download, extract or take from cache path = str(tile[0]) + "/" + str(tile[1]) + "/" if not os.path.exists(path): os.makedirs(path)
def main(args): try: shapefile = args[1] driver = ogr.GetDriverByName("ESRI Shapefile") dataSource = driver.Open(shapefile, 0) layer = dataSource.GetLayer() totalImages = layer.GetFeatureCount() print str(totalImages) + " Total Images" except IndexError: usage() return False tile_size = 256 zoomlevels = [20] tms_scheme = False srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") g = 0 for feature in layer: the_ID = feature.GetField("id") the_name = feature.GetField("Name") the_geom = feature.GetGeometryRef() the_env = the_geom.GetEnvelope() ULLon = the_env[0] ULLat = the_env[3] LRLon = the_env[1] LRLat = the_env[2] id = str(g) print id + " " + str(g + 1) + " of " + str(totalImages) tm = TilesManager( tiles_dir="/tmp", tiles_url= "https://tile-live.appspot.com/getTile/?z={z}&x={x}&y={y}&layer=derivative&redirect=false" ) tiles = tm.tileslist(bbox=(ULLon, LRLat, LRLon, ULLat), zoomlevels=zoomlevels) x = 0 y = 0 z = 0 for the_tile in tiles: tilecontent = tm.tile(the_tile) fileType = magic.from_buffer(tilecontent, mime=True) fileRoot = id + "-" + str(x) projection = proj.GoogleProjection(tile_size, zoomlevels, tms_scheme) tileBBOX = projection.tile_bbox(the_tile) im = Image.open(StringIO.StringIO(tilecontent)) fileName = fileRoot + ".tiff" print fileName + str(tileBBOX) im.save(fileName) im.close() try: ds = gdal.Open(fileName, GA_Update) gt = CalcGeoTransform(tileBBOX, fileName) ds.SetGeoTransform(gt) ds.SetProjection(srs.ExportToWkt()) if ds.RasterCount == 3: drv = gdal.GetDriverByName('VRT') newDS = drv.CreateCopy(fileRoot + '.vrt', ds, 0) newDS.AddBand(gdal.GDT_Byte) newDS.GetRasterBand(4).SetColorInterpretation( GCI_AlphaBand) drv2 = gdal.GetDriverByName('GTiff') outDS = drv2.CreateCopy(fileRoot + '-4.tiff', newDS, 0) outDS.GetRasterBand(4).Fill(255) newDS = None outDS = None os.system('rm ' + fileName) os.system('rm ' + fileRoot + '.vrt') os.system('mv ' + fileRoot + '-4.tiff ' + fileName) ds = None # warpString = 'gdalwarp ' + fileName + ' clipped-' + fileRoot + '.tiff' + ' -cutline AOIs.shp -cwhere "id = \'' + str(the_ID) + '\'"' # print warpString os.system('gdalwarp ' + fileName + ' clipped-' + fileRoot + '.tiff' + ' -cutline AOIs.shp -cwhere "id = \'' + str(the_ID) + '\'"') os.system('rm ' + fileName) os.system('mv clipped-' + fileRoot + '.tiff ' + fileName) except RuntimeError as ex: raise IOError(ex) print "Weird one" x += 1 y += 1 if y == 1000: mosaicName = "mosaic" + str(z) + ".vrt" if z == 0: os.system('gdalbuildvrt ' + mosaicName + ' *.tiff') else: mosaicList = id + '-' + str(z) + '[0-9][0-9][0-9].tiff' os.system('gdalbuildvrt ' + mosaicName + ' ' + mosaicList) y = 0 z += 1 if z > 0: os.system('gdalbuildvrt rest.vrt ' + id + '-' + str(z) + '[0-9][0-9][0-9].tiff') os.system('gdalbuildvrt mosaic.vrt *.vrt') os.system('gdal_translate -of GTiff -projwin ' + str(ULLon) + " " + str(ULLat) + " " + str(LRLon) + " " + str(LRLat) + ' mosaic.vrt ' + id + ".tiff") os.system('rm *.aux.xml && rm *.png && rm *.vrt') z = 0 else: os.system('gdalbuildvrt mosaic.vrt ' + id + '-*.tiff') os.system('gdal_translate -of GTiff -projwin ' + str(ULLon) + " " + str(ULLat) + " " + str(LRLon) + " " + str(LRLat) + ' mosaic.vrt ' + id + ".tiff") os.system('rm ' + id + '-*.tiff && rm *.vrt') g += 1 os.system('ls *.tiff > filelist') os.system('tar -zcvf GoogleImages.tar.gz $(cat filelist)')
def main(args): try: shapefile = args[1] driver = ogr.GetDriverByName("ESRI Shapefile") dataSource = driver.Open(shapefile, 0) layer = dataSource.GetLayer() totalImages = layer.GetFeatureCount() print str(totalImages) + " Total Features" except IndexError: usage() return False tile_size = 256 zoomlevels = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ] tms_scheme = False srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") g = 0 with open(args[2], 'w') as csvfile: fieldnames = ['z', 'x', 'y', 'v'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for feature in layer: the_geom = feature.GetGeometryRef() the_env = the_geom.GetEnvelope() ULLon = the_env[0] ULLat = the_env[3] LRLon = the_env[1] LRLat = the_env[2] id = str(g) print "Working on %s of %s Features" % (str(g + 1), str(totalImages)) tm = TilesManager(tiles_dir="/tmp", tiles_url="http://{z}/{x}/{y}", cache=False) tiles = tm.tileslist(bbox=(ULLon, LRLat, LRLon, ULLat), zoomlevels=zoomlevels) for the_tile in tiles: print the_tile[0] # tilecontent = tm.tile(the_tile) projection = proj.GoogleProjection(tile_size, zoomlevels, tms_scheme) tileBBOX = projection.tile_bbox(the_tile) neLon = tileBBOX[2] neLat = tileBBOX[3] swLat = tileBBOX[1] swLon = tileBBOX[0] bboxWKT = "POLYGON ((%s %s, %s %s, %s %s, %s %s, %s %s))" % ( neLon, neLat, neLon, swLat, swLon, swLat, swLon, neLat, neLon, neLat) bboxPoly = ogr.CreateGeometryFromWkt(bboxWKT) intersection = bboxPoly.Intersection(the_geom) if intersection.IsEmpty() == False: writer.writerow({ 'z': the_tile[0], 'x': the_tile[1], 'y': the_tile[2], 'v': '1' }) #print "%s,%s,%s,1" % (the_tile[0],the_tile[1],the_tile[2]) g += 1
for y in range(int((ll0[0]+180)/(360.0/width)), int((ll1[0]+180)/(360.0/width)+1)): for x in range(int((90-ll0[1])/(180.0/height)), int((90-ll1[1])/(180.0/height)+1)): l.append((z, x, y)) return l tiles = tileslist(bbox=(102.9910789, 30.2212955, 103.024096,30.26996163 ), levels=[18]) if down: logging.basicConfig(level = logging.DEBUG) # From a TMS tile server # http://www.scgis.net.cn/imap/iMapServer/defaultRest/services/newtianditudom/tile/15/0/0 tm = TilesManager(tiles_url="http://www.scgis.net.cn/imap/iMapServer/defaultRest/services/newtianditudom/tile/{z}/{x}/{y}", tiles_dir=".", cache_scheme="wmts", cache=False) count = len(tiles) for tile in tiles: tilecontent = tm.tile(tile) # download, extract or take from cache with open('%s_%s_%s.png'%tile,'wb') as img: img.write(tilecontent) print "Cache %s finish ..." % count count -= 1 else: from PIL import Image import numpy as np a = np.array(tiles) _, gmaxx, gmaxy = a.max(0) _, gminx, gminy = a.min(0) _,w,h = a.max(0)-a.min(0) + 1