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