from models.core import CameraParameters class GSDCalculator: @staticmethod def calculate_gsd( altitude: float, focal_length: float, sensor_width: float, image_width: int, ) -> float: raise NotImplementedError @staticmethod def calculate_footprint( altitude: float, camera_params: CameraParameters, ) -> tuple[float, float]: raise NotImplementedError @staticmethod def altitude_for_gsd( target_gsd: float, focal_length: float, sensor_width: float, image_width: int, ) -> float: raise NotImplementedError @staticmethod def calculate_coverage_radius( altitude: float, camera_params: CameraParameters, ) -> float: raise NotImplementedError