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

56 lines
1.9 KiB
Python
Raw Normal View History

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