예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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()
예제 #4
0
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()
예제 #6
0
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)
예제 #7
0
# 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)
    with open(path + str(tile[2]) + ".png", 'wb') as f:
        f.write(tilecontent)
예제 #8
0
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)')
예제 #9
0
    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   
    # image size
    img_size = ( h * 256, w * 256 )
    large_img = Image.new('RGB', img_size)
    
예제 #10
0
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)')