44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.deps import get_db
|
|
from app.models.common import SurfaceKind
|
|
from app.models.terrain import (
|
|
ElevationResponse,
|
|
LosRequest,
|
|
LosResponse,
|
|
TerrainProfileRequest,
|
|
TerrainProfileResponse,
|
|
)
|
|
from app.routers.errors import as_501
|
|
from app.services import terrain as terrain_service
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/elevation", response_model=ElevationResponse)
|
|
def elevation(
|
|
lat: float = Query(ge=-90, le=90),
|
|
lon: float = Query(ge=-180, le=180),
|
|
surface: SurfaceKind = "dtm",
|
|
) -> ElevationResponse:
|
|
return as_501(lambda: terrain_service.elevation_at(lat, lon, surface))
|
|
|
|
|
|
@router.post("/profile", response_model=TerrainProfileResponse)
|
|
def profile(
|
|
request: TerrainProfileRequest,
|
|
db: Annotated[Session, Depends(get_db)],
|
|
) -> TerrainProfileResponse:
|
|
return terrain_service.terrain_profile(request, db)
|
|
|
|
|
|
@router.post("/los", response_model=LosResponse)
|
|
def los(
|
|
request: LosRequest,
|
|
db: Annotated[Session, Depends(get_db)],
|
|
) -> LosResponse:
|
|
return terrain_service.los(request, db)
|