added obstacles
This commit is contained in:
@@ -7,7 +7,7 @@ from sqlalchemy.orm import Session
|
||||
from app.config import get_settings
|
||||
from app.core import dem
|
||||
from app.core.diffraction import deygout
|
||||
from app.core.fresnel import los_analysis
|
||||
from app.core.fresnel import LosSample, los_analysis
|
||||
from app.core.geo import GeoPoint, PathPoint, linestring_geojson, sample_path
|
||||
from app.core.surface import build_surface_profile
|
||||
from app.models.terrain import (
|
||||
@@ -102,19 +102,34 @@ def los(
|
||||
request.frequency_mhz * 1_000_000,
|
||||
)
|
||||
|
||||
def convert(sample: object) -> Obstruction:
|
||||
def convert(sample: LosSample) -> Obstruction:
|
||||
return Obstruction(
|
||||
distance_m=sample.distance_m,
|
||||
clearance_m=sample.clearance_m,
|
||||
fresnel_radius_m=sample.fresnel_radius_m,
|
||||
required_clearance_m=sample.required_clearance_m,
|
||||
type=sample.obstruction_type,
|
||||
)
|
||||
|
||||
geometric_obstructions = [
|
||||
sample for sample in result.obstructions if sample.clearance_m < 0
|
||||
]
|
||||
building_obstructions = [
|
||||
sample
|
||||
for sample in geometric_obstructions
|
||||
if sample.obstruction_type == "building"
|
||||
]
|
||||
|
||||
return LosResponse(
|
||||
los_clear=result.los_clear,
|
||||
geometric_los=result.geometric_los,
|
||||
first_fresnel_clearance_pct=result.first_fresnel_clearance_pct,
|
||||
worst_obstruction=convert(result.worst_sample) if result.worst_sample else None,
|
||||
obstructions=[convert(sample) for sample in result.obstructions],
|
||||
geometric_obstructions=[convert(sample) for sample in geometric_obstructions],
|
||||
fresnel_violations_count=len(result.obstructions),
|
||||
geometric_obstructions_count=len(geometric_obstructions),
|
||||
building_obstructions_count=len(building_obstructions),
|
||||
diffraction_loss_db=diffraction_loss,
|
||||
profile_ref=f"inline:{profile_request.samples}",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user