import math from models.core import GPSPoint from models.satellite import TileCoords, TileBounds class WebMercatorUtils: EARTH_RADIUS = 6378137.0 TILE_SIZE = 256 @classmethod def gps_to_tile(cls, gps: GPSPoint, zoom: int) -> TileCoords: raise NotImplementedError @classmethod def tile_to_gps(cls, coords: TileCoords) -> GPSPoint: raise NotImplementedError @classmethod def get_tile_bounds(cls, coords: TileCoords) -> TileBounds: raise NotImplementedError @classmethod def gps_to_pixel( cls, gps: GPSPoint, zoom: int ) -> tuple[float, float]: raise NotImplementedError @classmethod def pixel_to_gps( cls, pixel: tuple[float, float], zoom: int ) -> GPSPoint: raise NotImplementedError @classmethod def meters_per_pixel(cls, lat: float, zoom: int) -> float: raise NotImplementedError @classmethod def get_tiles_in_bounds( cls, nw: GPSPoint, se: GPSPoint, zoom: int ) -> list[TileCoords]: raise NotImplementedError