from abc import ABC, abstractmethod from typing import Optional import numpy as np from models.core import GPSPoint from models.satellite import TileCoords, TileBounds class SatelliteDataManagerBase(ABC): @abstractmethod async def get_tile( self, gps: GPSPoint, zoom: int ) -> Optional[tuple[np.ndarray, TileBounds]]: pass @abstractmethod async def get_tile_by_coords( self, coords: TileCoords ) -> Optional[tuple[np.ndarray, TileBounds]]: pass @abstractmethod async def get_tiles_in_radius( self, center: GPSPoint, radius_meters: float, zoom: int ) -> list[tuple[np.ndarray, TileBounds]]: pass @abstractmethod async def get_tile_bounds(self, coords: TileCoords) -> TileBounds: pass @abstractmethod async def prefetch_area( self, nw: GPSPoint, se: GPSPoint, zoom: int ) -> int: pass @abstractmethod def gps_to_tile_coords(self, gps: GPSPoint, zoom: int) -> TileCoords: pass @abstractmethod def tile_coords_to_gps(self, coords: TileCoords) -> GPSPoint: pass