You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

44 lines
1.7 KiB

import aiohttp
from pymongo.asynchronous.database import AsyncDatabase
from logger import logger
from time import time
class TileManager:
domain = 'a.tile.openstreetmap.org'
format = "png"
def __init__(self, core):
self.core = core
self.dbStore:AsyncDatabase = self.core.dbStore
def generateHeaders(self):
return {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
"Referer": "http://localhost:4200/",
"Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"
}
async def grabTile(self, z:int, x:int, y:int):
#grab from db
collection = self.dbStore['openstreetmap']
query = {"x":x, "y":y, "z": z}
t = await collection.find_one(query)
if t:
return t["img"]
else:
#ищем картинку чтож поделать
url = f"https://{self.domain}/{z}/{x}/{y}.{self.format}"
async with aiohttp.ClientSession() as session:
async with session.get(url, ssl=False, headers=self.generateHeaders()) as resp:
# Read the entire response body as bytes
img = await resp.read()
#logger.info(url, resp.status)
if resp.status == 200:
query['ts'] = time()
query['img'] = img
query['format'] = self.format
await collection.insert_one(query)
return img
else:
raise Exception("cannot get img, code: " + str(resp.status))