예제 #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
 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()
예제 #3
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)
예제 #4
0
    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()
예제 #5
0
    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()
예제 #6
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 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
예제 #8
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)
예제 #9
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()
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()
예제 #11
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)
예제 #12
0
    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()
예제 #13
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)')
예제 #14
0
 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()
예제 #15
0
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):
예제 #16
0
 def __init__(self, filepath, **builder_args):
     self.zipfile = ZipFile(filepath, 'w')
     self.tm = TilesManager(**builder_args)
     self.tiles = set()
 def __init__(self, filepath, **builder_args):
     self.zipfile = ZipFile(filepath, 'w')
     self.tm = TilesManager(**builder_args)
     self.tiles = set()
예제 #18
0
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)
예제 #19
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)')
예제 #20
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 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
예제 #21
0
        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