print(level, row, column)

x, y = geoportail_pyramid[level].coordinate_to_projection(location)
from PyGeoPortail.Math.Interval import Interval2D
interval = Interval2D((x, x + 500), (y, y + 500))
mosaic_interval = geoportail_pyramid[level].projection_interval_to_mosaic(interval)
print(mosaic_interval)
# for row, column in mosaic_interval.iter():
#     print(row, column)

loop = asyncio.get_event_loop()

tile = loop.run_until_complete(geoportail_wtms.download_ortho_photo(level, row, column))
# tile.to_pil_image().save(tile.filename(with_layer=True, with_level=True))

geoportail_map_provider = GeoPortailMapProvider(geoportail_wtms)
tasks = [asyncio.async(geoportail_map_provider.get_tile(level, row, column + i)) for i in range(3)]
loop.run_until_complete(asyncio.wait(tasks))

lru_cache = LruCache(constraint=1024**3)

def done_callback(future):
    print('done', future.result())

cached_pyramid = CachedPyramid(geoportail_map_provider, lru_cache)
tasks = [asyncio.async(cached_pyramid.acquire(level, row, column + i)) for i in (0, 1, 0)]
for task in tasks:
    task.add_done_callback(done_callback)
loop.run_until_complete(asyncio.wait(tasks))
cached_pyramid.release(level, row, column)
lru_cache.recycle()
from PyGeoPortail.TileMap.GeoPortail import (GeoPortailPyramid,
                                             GeoPortailWTMS,
                                             GeoPortailMapProvider,
                                             GeoPortailOthorPhotoProvider)
from PyGeoPortail.TileMap.Projection import GeoAngle, GeoCoordinate
from PyGeoPortail.Math.Interval import Interval2D

####################################################################################################

geoportail_pyramid = GeoPortailPyramid()

geoportail_wtms = GeoPortailWTMS(user='******',
                                 password='******',
                                 api_key='qd58byg78dg3nloou4ksa0pz')
geoportail_map_provider = GeoPortailMapProvider(geoportail_wtms)

longitude = GeoAngle(6, 7, 0)
latitude = GeoAngle(44, 41, 0)
location = GeoCoordinate(longitude, latitude)
x, y = geoportail_pyramid.coordinate_to_projection(location)
area = Interval2D((x, x), (y, y)).enlarge(20000) # 10 km
print('Area:', area)

loop = asyncio.get_event_loop()
cache_path = os.path.join(os.environ['HOME'], '.cache', 'pygeoportail')
if not os.path.exists(cache_path):
    os.mkdir(cache_path)

def done_callback(future):
    tile = future.result()