from fastapi import APIRouter, HTTPException from pydantic import BaseModel import math router = APIRouter() class DistanceRequest(BaseModel): lat1: float lon1: float lat2: float lon2: float class DistanceResponse(BaseModel): distance: float # Distance in kilometers @router.post("/api/distance", response_model=DistanceResponse) async def calculate_distance(request: DistanceRequest): """Calculate the distance between two coordinates using the Haversine formula.""" try: # Haversine formula R = 6371.0 # Earth radius in kilometers lat1_rad = math.radians(request.lat1) lon1_rad = math.radians(request.lon1) lat2_rad = math.radians(request.lat2) lon2_rad = math.radians(request.lon2) dlat = lat2_rad - lat1_rad dlon = lon2_rad - lon1_rad a = math.sin(dlat / 2)**2 + math.cos(lat1_rad) * math.cos(lat2_rad) * math.sin(dlon / 2)**2 c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) distance = R * c # Distance in kilometers return DistanceResponse(distance=distance) except Exception as e: raise HTTPException(status_code=500, detail=str(e))