GeoToolsHub / backend /distance.py
gauthamnairy's picture
Upload 4 files
ac5007c verified
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))