first commit

This commit is contained in:
2026-06-23 09:13:51 +03:00
commit f6c7db328f
103 changed files with 1618 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
from typing import Literal
from pydantic import BaseModel, Field
from app.models.common import GeoJSON, Point
PatternKind = Literal["omni", "sector", "file"]
class AntennaPatternSpec(BaseModel):
pattern: PatternKind = "omni"
azimuth_deg: float = 0
tilt_deg: float = 0
gain_dbi: float = 0
beamwidth_h: float | None = Field(default=None, gt=0)
beamwidth_v: float | None = Field(default=None, gt=0)
pattern_file: str | None = None
front_to_back_db: float = Field(default=25, ge=0)
sidelobe_floor_db: float = Field(default=-30, le=0)
class PatternSample(BaseModel):
azimuth_deg: float
elevation_deg: float
gain_dbi: float
class PatternResponse(BaseModel):
pattern: PatternKind
samples: list[PatternSample]
class BeamRequest(BaseModel):
origin: Point
antenna: AntennaPatternSpec
radius_m: float = Field(gt=0)
class BeamResponse(BaseModel):
geojson: GeoJSON