skyeyesystem/backend/Skyeye-sys-dev/skyeye-service-py/klkx/planning/app/utils.py

56 lines
1.9 KiB
Python

from shapely.geometry import Polygon, LineString, Point
from planning.uav import Uav
from planning import UavPlanning
from planning.target import (PointTarget, LineTarget, SarRegionTarget, AroundTarget, TargetType)
def sar_planning(inputs):
uav_list = []
max_width = 0
for uav_param in inputs['uavs']:
uav = Uav(
id = uav_param["id"],
start_coord = Point(uav_param["start_coord"]),
end_coord = Point(uav_param["end_coord"]),
payload = uav_param["payload"],
constraint = uav_param["constraint"]
)
uav_list.append(uav)
max_width = max(uav_param["payload"]["width"], max_width)
target_list = []
for target_param in inputs['targets']:
target_type = target_param["type"]
if target_type == TargetType.point:
target = PointTarget(
id = target_param["id"],
shape = Point(target_param["coords"])
)
elif target_type == TargetType.line:
target = LineTarget(
id = target_param["id"],
shape = LineString(target_param["coords"])
)
elif target_type == TargetType.region:
target = SarRegionTarget(
id = target_param["id"],
shape = Polygon(target_param["coords"]),
width = max_width * 0.95
)
elif target_type == TargetType.around:
target = AroundTarget(
id = target_param["id"],
shape = Point(target_param["coords"]),
)
else:
raise TypeError(f"{target_type} is not a valid target type.")
target_list.append(target)
optimize = inputs["optimize"]
planning = UavPlanning(target_list, uav_list, 'SAR')
planning.solve()
if optimize:
planning.optimize()
result, _ = planning.solve_route()
return result